1c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===//
2c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
3c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//                     The LLVM Compiler Infrastructure
4c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
8c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===//
9c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
10c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// type_traits
11c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
12c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// member_function_pointer
13c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
14c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <type_traits>
15724b5ab350719612b2f175ca115a98c5b8a9e21aEric Fiselier#include "test_macros.h"
16c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
17c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnanttemplate <class T>
18c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantvoid test_member_function_pointer_imp()
19c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{
20c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_void<T>::value, "");
21724b5ab350719612b2f175ca115a98c5b8a9e21aEric Fiselier#if TEST_STD_VER > 11
2279d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_null_pointer<T>::value, "");
2379d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow#endif
24c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_integral<T>::value, "");
25c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_floating_point<T>::value, "");
26c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_array<T>::value, "");
27c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_pointer<T>::value, "");
28c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_lvalue_reference<T>::value, "");
29c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_rvalue_reference<T>::value, "");
30c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_member_object_pointer<T>::value, "");
31c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert( std::is_member_function_pointer<T>::value, "");
32c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_enum<T>::value, "");
33c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_union<T>::value, "");
34c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_class<T>::value, "");
35c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    static_assert(!std::is_function<T>::value, "");
36c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}
37c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
38c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnanttemplate <class T>
39c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantvoid test_member_function_pointer()
40c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{
41c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    test_member_function_pointer_imp<T>();
42c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    test_member_function_pointer_imp<const T>();
43c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    test_member_function_pointer_imp<volatile T>();
44c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    test_member_function_pointer_imp<const volatile T>();
45c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}
46c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
47c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantclass Class
48c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{
49c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant};
50c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
517490f53118156f446b61583b7f0af0847b5942d7Marshall Clowstruct incomplete_type;
527490f53118156f446b61583b7f0af0847b5942d7Marshall Clow
53c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantint main()
54c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{
552c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)()>();
562c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int)>();
572c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char)>();
584f3368e2693029a9adcd5c3d20ff08cfb6457a20Marshall Clow
592c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() const>();
602c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) const>();
612c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) const>();
624f3368e2693029a9adcd5c3d20ff08cfb6457a20Marshall Clow
632c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() volatile>();
642c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) volatile>();
652c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) volatile>();
664f3368e2693029a9adcd5c3d20ff08cfb6457a20Marshall Clow
672c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...)>();
682c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, ...)>();
692c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char, ...)>();
7063648cffc0133ecd3ff237225767c281c7f6ee89Eric Fiselier
712c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) const>();
722c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, ...) const>();
732c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char, ...) const>();
742c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
752c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) volatile>();
762c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, ...) volatile>();
772c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char, ...) volatile>();
7863648cffc0133ecd3ff237225767c281c7f6ee89Eric Fiselier
7963648cffc0133ecd3ff237225767c281c7f6ee89Eric Fiselier
804f3368e2693029a9adcd5c3d20ff08cfb6457a20Marshall Clow// reference qualifiers on functions are a C++11 extension
81724b5ab350719612b2f175ca115a98c5b8a9e21aEric Fiselier#if TEST_STD_VER >= 11
822c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  // Noexcept qualifiers
832c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() noexcept>();
842c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) noexcept>();
852c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) noexcept>();
862c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
872c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() const noexcept>();
882c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) const noexcept>();
892c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) const noexcept>();
902c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
912c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() volatile noexcept>();
922c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) volatile noexcept>();
932c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) volatile noexcept>();
942c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
952c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) noexcept>();
962c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, ...) noexcept>();
972c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char, ...) noexcept>();
982c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
992c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) const noexcept>();
1002c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, ...) const noexcept>();
1012c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char, ...) const noexcept>();
1022c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1032c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) volatile noexcept>();
1042c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, ...) volatile noexcept>();
1052c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char, ...) volatile noexcept>();
1062c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1072c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  // lvalue qualifiers
1082c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() &>();
1092c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) &>();
1102c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) &>();
1112c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) &>();
1122c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) &>();
1132c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) &>();
1142c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1152c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() const &>();
1162c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) const &>();
1172c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) const &>();
1182c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) const &>();
1192c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) const &>();
1202c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) const &>();
1212c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1222c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() volatile &>();
1232c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) volatile &>();
1242c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) volatile &>();
1252c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) volatile &>();
1262c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) volatile &>();
1272c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) volatile &>();
1282c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1292c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() const volatile &>();
1302c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) const volatile &>();
1312c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) const volatile &>();
1322c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) const volatile &>();
1332c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) const volatile &>();
1342c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) const volatile &>();
1352c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1362c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  // Lvalue qualifiers with noexcept
1372c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() & noexcept>();
1382c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) & noexcept>();
1392c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) & noexcept>();
1402c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) & noexcept>();
1412c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) & noexcept>();
1422c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) & noexcept>();
1432c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1442c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() const & noexcept>();
1452c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) const & noexcept>();
1462c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) const & noexcept>();
1472c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) const & noexcept>();
1482c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) const & noexcept>();
1492c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) const & noexcept>();
1502c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1512c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() volatile & noexcept>();
1522c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) volatile & noexcept>();
1532c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) volatile & noexcept>();
1542c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) volatile & noexcept>();
1552c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) volatile & noexcept>();
1562c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) volatile & noexcept>();
1572c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1582c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() const volatile & noexcept>();
1592c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) const volatile & noexcept>();
1602c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) const volatile & noexcept>();
1612c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) const volatile & noexcept>();
1622c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) const volatile & noexcept>();
1632c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) const volatile & noexcept>();
1642c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1652c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  // RValue qualifiers
1662c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() &&>();
1672c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) &&>();
1682c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) &&>();
1692c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) &&>();
1702c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) &&>();
1712c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) &&>();
1722c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1732c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() const &&>();
1742c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) const &&>();
1752c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) const &&>();
1762c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) const &&>();
1772c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) const &&>();
1782c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) const &&>();
1792c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1802c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() volatile &&>();
1812c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) volatile &&>();
1822c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) volatile &&>();
1832c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) volatile &&>();
1842c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) volatile &&>();
1852c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) volatile &&>();
1862c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1872c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() const volatile &&>();
1882c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) const volatile &&>();
1892c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) const volatile &&>();
1902c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) const volatile &&>();
1912c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) const volatile &&>();
1922c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) const volatile &&>();
1932c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
1942c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  // RValue qualifiers with noexcept
1952c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() && noexcept>();
1962c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) && noexcept>();
1972c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) && noexcept>();
1982c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) && noexcept>();
1992c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) && noexcept>();
2002c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) && noexcept>();
2012c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
2022c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() const && noexcept>();
2032c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) const && noexcept>();
2042c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) const && noexcept>();
2052c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) const && noexcept>();
2062c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) const && noexcept>();
2072c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) const && noexcept>();
2082c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
2092c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() volatile && noexcept>();
2102c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) volatile && noexcept>();
2112c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) volatile && noexcept>();
2122c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) volatile && noexcept>();
2132c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) volatile && noexcept>();
2142c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) volatile && noexcept>();
2152c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier
2162c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)() const volatile && noexcept>();
2172c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int) const volatile && noexcept>();
2182c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char) const volatile && noexcept>();
2192c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(...) const volatile && noexcept>();
2202c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int,...) const volatile && noexcept>();
2212c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  test_member_function_pointer<void (Class::*)(int, char,...) const volatile && noexcept>();
2224f3368e2693029a9adcd5c3d20ff08cfb6457a20Marshall Clow#endif
2237490f53118156f446b61583b7f0af0847b5942d7Marshall Clow
224211f9a485c4b13c61553d55a7bc662e1506b28fdMarshall Clow//  LWG#2582
2252c477cb41afd22162ab5ac671eea3cb78cdc2d6cEric Fiselier  static_assert(!std::is_member_function_pointer<incomplete_type>::value, "");
226c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}
227