Fix is_member_function_pointer does not account for ellipsis. PR20345. Patch from Agustin Berge.
I reviewed the patch and added the test cases. llvm-svn: 215984
This commit is contained in:
parent
07a78740ae
commit
0acf0d2701
|
@ -1697,6 +1697,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...), true, false>
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...), true, false>
|
||||
{
|
||||
typedef _Class _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const, true, false>
|
||||
{
|
||||
|
@ -1705,6 +1713,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const, true, false
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const, true, false>
|
||||
{
|
||||
typedef _Class const _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) volatile, true, false>
|
||||
{
|
||||
|
@ -1713,6 +1729,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) volatile, true, fa
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) volatile, true, false>
|
||||
{
|
||||
typedef _Class volatile _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const volatile, true, false>
|
||||
{
|
||||
|
@ -1721,6 +1745,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const volatile, tr
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const volatile, true, false>
|
||||
{
|
||||
typedef _Class const volatile _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
#if __has_feature(cxx_reference_qualified_functions)
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
|
@ -1731,6 +1763,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) &, true, false>
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) &, true, false>
|
||||
{
|
||||
typedef _Class& _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const&, true, false>
|
||||
{
|
||||
|
@ -1739,6 +1779,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const&, true, fals
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const&, true, false>
|
||||
{
|
||||
typedef _Class const& _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) volatile&, true, false>
|
||||
{
|
||||
|
@ -1747,6 +1795,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) volatile&, true, f
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) volatile&, true, false>
|
||||
{
|
||||
typedef _Class volatile& _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const volatile&, true, false>
|
||||
{
|
||||
|
@ -1755,6 +1811,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const volatile&, t
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const volatile&, true, false>
|
||||
{
|
||||
typedef _Class const volatile& _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) &&, true, false>
|
||||
{
|
||||
|
@ -1763,6 +1827,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) &&, true, false>
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) &&, true, false>
|
||||
{
|
||||
typedef _Class&& _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const&&, true, false>
|
||||
{
|
||||
|
@ -1771,6 +1843,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const&&, true, fal
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const&&, true, false>
|
||||
{
|
||||
typedef _Class const&& _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) volatile&&, true, false>
|
||||
{
|
||||
|
@ -1779,6 +1859,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) volatile&&, true,
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) volatile&&, true, false>
|
||||
{
|
||||
typedef _Class volatile&& _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const volatile&&, true, false>
|
||||
{
|
||||
|
@ -1787,6 +1875,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const volatile&&,
|
|||
typedef _Rp (_FnType) (_Param...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class ..._Param>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const volatile&&, true, false>
|
||||
{
|
||||
typedef _Class const volatile&& _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_Param..., ...);
|
||||
};
|
||||
|
||||
#endif // __has_feature(cxx_reference_qualified_functions)
|
||||
|
||||
#else // _LIBCPP_HAS_NO_VARIADICS
|
||||
|
@ -1799,6 +1895,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(), true, false>
|
|||
typedef _Rp (_FnType) ();
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(...), true, false>
|
||||
{
|
||||
typedef _Class _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0), true, false>
|
||||
{
|
||||
|
@ -1807,6 +1911,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0), true, false>
|
|||
typedef _Rp (_FnType) (_P0);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, ...), true, false>
|
||||
{
|
||||
typedef _Class _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1), true, false>
|
||||
{
|
||||
|
@ -1815,6 +1927,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1), true, false>
|
|||
typedef _Rp (_FnType) (_P0, _P1);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, ...), true, false>
|
||||
{
|
||||
typedef _Class _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, _P1, ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1, class _P2>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2), true, false>
|
||||
{
|
||||
|
@ -1823,6 +1943,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2), true, false>
|
|||
typedef _Rp (_FnType) (_P0, _P1, _P2);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1, class _P2>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2, ...), true, false>
|
||||
{
|
||||
typedef _Class _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, _P1, _P2, ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)() const, true, false>
|
||||
{
|
||||
|
@ -1831,6 +1959,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)() const, true, false>
|
|||
typedef _Rp (_FnType) ();
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(...) const, true, false>
|
||||
{
|
||||
typedef _Class const _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0) const, true, false>
|
||||
{
|
||||
|
@ -1839,6 +1975,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0) const, true, false>
|
|||
typedef _Rp (_FnType) (_P0);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, ...) const, true, false>
|
||||
{
|
||||
typedef _Class const _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1) const, true, false>
|
||||
{
|
||||
|
@ -1847,6 +1991,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1) const, true, false>
|
|||
typedef _Rp (_FnType) (_P0, _P1);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, ...) const, true, false>
|
||||
{
|
||||
typedef _Class const _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, _P1, ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1, class _P2>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2) const, true, false>
|
||||
{
|
||||
|
@ -1855,6 +2007,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2) const, true, f
|
|||
typedef _Rp (_FnType) (_P0, _P1, _P2);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1, class _P2>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2, ...) const, true, false>
|
||||
{
|
||||
typedef _Class const _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, _P1, _P2, ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)() volatile, true, false>
|
||||
{
|
||||
|
@ -1863,6 +2023,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)() volatile, true, false>
|
|||
typedef _Rp (_FnType) ();
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(...) volatile, true, false>
|
||||
{
|
||||
typedef _Class volatile _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0) volatile, true, false>
|
||||
{
|
||||
|
@ -1871,6 +2039,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0) volatile, true, false>
|
|||
typedef _Rp (_FnType) (_P0);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, ...) volatile, true, false>
|
||||
{
|
||||
typedef _Class volatile _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1) volatile, true, false>
|
||||
{
|
||||
|
@ -1879,6 +2055,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1) volatile, true, fal
|
|||
typedef _Rp (_FnType) (_P0, _P1);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, ...) volatile, true, false>
|
||||
{
|
||||
typedef _Class volatile _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, _P1, ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1, class _P2>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2) volatile, true, false>
|
||||
{
|
||||
|
@ -1887,6 +2071,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2) volatile, true
|
|||
typedef _Rp (_FnType) (_P0, _P1, _P2);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1, class _P2>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2, ...) volatile, true, false>
|
||||
{
|
||||
typedef _Class volatile _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, _P1, _P2, ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)() const volatile, true, false>
|
||||
{
|
||||
|
@ -1895,6 +2087,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)() const volatile, true, false
|
|||
typedef _Rp (_FnType) ();
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(...) const volatile, true, false>
|
||||
{
|
||||
typedef _Class const volatile _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0) const volatile, true, false>
|
||||
{
|
||||
|
@ -1903,6 +2103,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0) const volatile, true, fa
|
|||
typedef _Rp (_FnType) (_P0);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, ...) const volatile, true, false>
|
||||
{
|
||||
typedef _Class const volatile _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1) const volatile, true, false>
|
||||
{
|
||||
|
@ -1911,6 +2119,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1) const volatile, tru
|
|||
typedef _Rp (_FnType) (_P0, _P1);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, ...) const volatile, true, false>
|
||||
{
|
||||
typedef _Class const volatile _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, _P1, ...);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1, class _P2>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2) const volatile, true, false>
|
||||
{
|
||||
|
@ -1919,6 +2135,14 @@ struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2) const volatile
|
|||
typedef _Rp (_FnType) (_P0, _P1, _P2);
|
||||
};
|
||||
|
||||
template <class _Rp, class _Class, class _P0, class _P1, class _P2>
|
||||
struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2, ...) const volatile, true, false>
|
||||
{
|
||||
typedef _Class const volatile _ClassType;
|
||||
typedef _Rp _ReturnType;
|
||||
typedef _Rp (_FnType) (_P0, _P1, _P2, ...);
|
||||
};
|
||||
|
||||
#endif // _LIBCPP_HAS_NO_VARIADICS
|
||||
|
||||
template <class _Rp, class _Class>
|
||||
|
|
|
@ -61,6 +61,18 @@ int main()
|
|||
test_member_function_pointer<void (Class::*)(int) volatile>();
|
||||
test_member_function_pointer<void (Class::*)(int, char) volatile>();
|
||||
|
||||
test_member_function_pointer<void (Class::*)(...)>();
|
||||
test_member_function_pointer<void (Class::*)(int, ...)>();
|
||||
test_member_function_pointer<void (Class::*)(int, char, ...)>();
|
||||
|
||||
test_member_function_pointer<void (Class::*)(...) const>();
|
||||
test_member_function_pointer<void (Class::*)(int, ...) const>();
|
||||
test_member_function_pointer<void (Class::*)(int, char, ...) const>();
|
||||
|
||||
test_member_function_pointer<void (Class::*)(...) volatile>();
|
||||
test_member_function_pointer<void (Class::*)(int, ...) volatile>();
|
||||
test_member_function_pointer<void (Class::*)(int, char, ...) volatile>();
|
||||
|
||||
#if __cplusplus >= 201103L
|
||||
// reference qualifiers on functions are a C++11 extension
|
||||
test_member_function_pointer<void (Class::*)() &&>();
|
||||
|
@ -74,5 +86,17 @@ int main()
|
|||
test_member_function_pointer<void (Class::*)() volatile &&>();
|
||||
test_member_function_pointer<void (Class::*)(int) volatile &&>();
|
||||
test_member_function_pointer<void (Class::*)(int, char) volatile &&>();
|
||||
|
||||
test_member_function_pointer<void (Class::*)(...) &&>();
|
||||
test_member_function_pointer<void (Class::*)(int,...) &&>();
|
||||
test_member_function_pointer<void (Class::*)(int, char,...) &&>();
|
||||
|
||||
test_member_function_pointer<void (Class::*)(...) &>();
|
||||
test_member_function_pointer<void (Class::*)(int,...) &>();
|
||||
test_member_function_pointer<void (Class::*)(int, char,...) &>();
|
||||
|
||||
test_member_function_pointer<void (Class::*)(...) volatile &&>();
|
||||
test_member_function_pointer<void (Class::*)(int,...) volatile &&>();
|
||||
test_member_function_pointer<void (Class::*)(int, char,...) volatile &&>();
|
||||
#endif
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue