aboutsummaryrefslogtreecommitdiff
path: root/test/std/utilities/meta/meta.unary/meta.unary.cat/member_function_pointer.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/std/utilities/meta/meta.unary/meta.unary.cat/member_function_pointer.pass.cpp')
-rw-r--r--test/std/utilities/meta/meta.unary/meta.unary.cat/member_function_pointer.pass.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/test/std/utilities/meta/meta.unary/meta.unary.cat/member_function_pointer.pass.cpp b/test/std/utilities/meta/meta.unary/meta.unary.cat/member_function_pointer.pass.cpp
index 691c549b5e78..f685d71eebd2 100644
--- a/test/std/utilities/meta/meta.unary/meta.unary.cat/member_function_pointer.pass.cpp
+++ b/test/std/utilities/meta/meta.unary/meta.unary.cat/member_function_pointer.pass.cpp
@@ -14,9 +14,12 @@
#include <type_traits>
#include "test_macros.h"
+// NOTE: On Windows the function `test_is_member_function<void()>` and
+// `test_is_member_function<void() noexcept> has the same mangled despite being
+// a distinct instantiation. This causes Clang to emit an error. However
+// structs do not have this problem.
template <class T>
-void test_member_function_pointer_imp()
-{
+struct test_member_function_pointer_imp {
static_assert(!std::is_void<T>::value, "");
#if TEST_STD_VER > 11
static_assert(!std::is_null_pointer<T>::value, "");
@@ -33,16 +36,16 @@ void test_member_function_pointer_imp()
static_assert(!std::is_union<T>::value, "");
static_assert(!std::is_class<T>::value, "");
static_assert(!std::is_function<T>::value, "");
-}
+};
template <class T>
-void test_member_function_pointer()
+struct test_member_function_pointer :
+ test_member_function_pointer_imp<T>,
+ test_member_function_pointer_imp<const T>,
+ test_member_function_pointer_imp<volatile T>,
+ test_member_function_pointer_imp<const volatile T>
{
- test_member_function_pointer_imp<T>();
- test_member_function_pointer_imp<const T>();
- test_member_function_pointer_imp<volatile T>();
- test_member_function_pointer_imp<const volatile T>();
-}
+};
class Class
{