190dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert//===----------------------------------------------------------------------===// 290dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert// 390dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert// The LLVM Compiler Infrastructure 490dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert// 590dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open 690dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert// Source Licenses. See LICENSE.TXT for details. 790dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert// 890dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert//===----------------------------------------------------------------------===// 990dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 1090dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert// type_traits 1190dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 1290dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert// member_function_pointer 1390dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 1490dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert#define _LIBCPP_HAS_NO_VARIADICS 1590dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert#include <type_traits> 1690dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 1790dc8dd841b975fccfa4a278b9b44065d3644839Dan Alberttemplate <class T> 1890dc8dd841b975fccfa4a278b9b44065d3644839Dan Albertvoid test_member_function_pointer_imp() 1990dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert{ 2090dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_void<T>::value, ""); 2190dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert#if _LIBCPP_STD_VER > 11 2290dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_null_pointer<T>::value, ""); 2390dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert#endif 2490dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_integral<T>::value, ""); 2590dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_floating_point<T>::value, ""); 2690dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_array<T>::value, ""); 2790dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_pointer<T>::value, ""); 2890dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_lvalue_reference<T>::value, ""); 2990dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_rvalue_reference<T>::value, ""); 3090dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_member_object_pointer<T>::value, ""); 3190dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert( std::is_member_function_pointer<T>::value, ""); 3290dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_enum<T>::value, ""); 3390dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_union<T>::value, ""); 3490dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_class<T>::value, ""); 3590dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert static_assert(!std::is_function<T>::value, ""); 3690dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert} 3790dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 3890dc8dd841b975fccfa4a278b9b44065d3644839Dan Alberttemplate <class T> 3990dc8dd841b975fccfa4a278b9b44065d3644839Dan Albertvoid test_member_function_pointer() 4090dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert{ 4190dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer_imp<T>(); 4290dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer_imp<const T>(); 4390dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer_imp<volatile T>(); 4490dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer_imp<const volatile T>(); 4590dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert} 4690dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 4790dc8dd841b975fccfa4a278b9b44065d3644839Dan Albertclass Class 4890dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert{ 4990dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert}; 5090dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 5190dc8dd841b975fccfa4a278b9b44065d3644839Dan Albertint main() 5290dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert{ 5390dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)()>(); 5490dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int)>(); 5590dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int, char)>(); 5690dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 5790dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)() const>(); 5890dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int) const>(); 5990dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int, char) const>(); 6090dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 6190dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)() volatile>(); 6290dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int) volatile>(); 6390dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int, char) volatile>(); 6490dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 6590dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(...)>(); 6690dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int, ...)>(); 6790dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int, char, ...)>(); 6890dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 6990dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(...) const>(); 7090dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int, ...) const>(); 7190dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int, char, ...) const>(); 7290dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert 7390dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(...) volatile>(); 7490dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int, ...) volatile>(); 7590dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert test_member_function_pointer<void (Class::*)(int, char, ...) volatile>(); 7690dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert} 77