diff options
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.cpp | 21 |
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 { |