forked from boostorg/type_traits
Big update for is_function and is_member_function_pointer for modern compilers with modern features.
See https://github.com/boostorg/type_traits/issues/81.
This commit is contained in:
@ -15,6 +15,238 @@
|
||||
#include <boost/type_traits/detail/config.hpp>
|
||||
#include <boost/config/workaround.hpp>
|
||||
|
||||
#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
||||
|
||||
namespace boost {
|
||||
|
||||
template <class T>
|
||||
struct is_function : public false_type {};
|
||||
|
||||
#if __cpp_noexcept_function_type
|
||||
#define BOOST_TT_NOEXCEPT_PARAM , bool NE
|
||||
#define BOOST_TT_NOEXCEPT_DECL noexcept(NE)
|
||||
#else
|
||||
#define BOOST_TT_NOEXCEPT_PARAM
|
||||
#define BOOST_TT_NOEXCEPT_DECL
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define BOOST_TT_DEF_CALL __cdecl
|
||||
#else
|
||||
#define BOOST_TT_DEF_CALL
|
||||
#endif
|
||||
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const qualified:
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
|
||||
// Reference qualified:
|
||||
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const qualified:
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
|
||||
// rvalue reference qualified:
|
||||
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)&& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)&& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const qualified:
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret(Args..., ...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
|
||||
// reference qualified:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
|
||||
// rvalue reference qualified:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __clrcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __stdcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __fastcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_function<Ret __vectorcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
|
||||
|
||||
#endif // _MSC_VER
|
||||
|
||||
|
||||
}
|
||||
|
||||
#undef BOOST_TT_NOEXCEPT_DECL
|
||||
#undef BOOST_TT_NOEXCEPT_PARAM
|
||||
#undef BOOST_TT_DEF_CALL
|
||||
|
||||
#else
|
||||
|
||||
#if !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
|
||||
# include <boost/type_traits/detail/is_function_ptr_helper.hpp>
|
||||
#else
|
||||
@ -107,4 +339,6 @@ template <class T> struct is_function<T&> : public false_type {};
|
||||
#include <boost/type_traits/detail/is_function_msvc10_fix.hpp>
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif // BOOST_TT_IS_FUNCTION_HPP_INCLUDED
|
||||
|
@ -14,6 +14,269 @@
|
||||
#include <boost/type_traits/detail/config.hpp>
|
||||
#include <boost/detail/workaround.hpp>
|
||||
|
||||
#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
||||
|
||||
#include <boost/type_traits/is_function.hpp>
|
||||
|
||||
namespace boost {
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define BOOST_TT_DEF_CALL __thiscall
|
||||
#else
|
||||
#define BOOST_TT_DEF_CALL
|
||||
#endif
|
||||
|
||||
|
||||
template <class T>
|
||||
struct is_member_function_pointer : public false_type {};
|
||||
template <class T>
|
||||
struct is_member_function_pointer<T const> : public is_member_function_pointer<T> {};
|
||||
template <class T>
|
||||
struct is_member_function_pointer<T volatile> : public is_member_function_pointer<T> {};
|
||||
template <class T>
|
||||
struct is_member_function_pointer<T const volatile> : public is_member_function_pointer<T> {};
|
||||
|
||||
#if __cpp_noexcept_function_type
|
||||
#define BOOST_TT_NOEXCEPT_PARAM , bool NE
|
||||
#define BOOST_TT_NOEXCEPT_DECL noexcept(NE)
|
||||
#else
|
||||
#define BOOST_TT_NOEXCEPT_PARAM
|
||||
#define BOOST_TT_NOEXCEPT_DECL
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define BOOST_TT_DEF_CALL __thiscall
|
||||
#else
|
||||
#define BOOST_TT_DEF_CALL
|
||||
#endif
|
||||
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (C::*)(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const qualified:
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(C::*)(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
|
||||
// Reference qualified:
|
||||
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(C::*)(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const qualified:
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(C::*)(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
|
||||
// rvalue reference qualified:
|
||||
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(C::*)(Args..., ...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const qualified:
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(C::*)(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__cdecl C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__cdecl C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__cdecl C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
|
||||
// reference qualified:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__cdecl C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__cdecl C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__cdecl C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__cdecl C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
|
||||
// rvalue reference qualified:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__cdecl C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__cdecl C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__cdecl C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
// const volatile:
|
||||
#ifdef __CLR_VER
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret __clrcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
|
||||
struct is_member_function_pointer<Ret (__cdecl C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
|
||||
#endif
|
||||
}
|
||||
|
||||
#else // BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
||||
|
||||
#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
|
||||
//
|
||||
// Note: we use the "workaround" version for MSVC because it works for
|
||||
@ -117,4 +380,6 @@ struct is_member_function_pointer
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#endif // BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
||||
|
||||
#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
|
||||
|
@ -12,6 +12,19 @@
|
||||
#include "test.hpp"
|
||||
#include "check_integral_constant.hpp"
|
||||
|
||||
struct X
|
||||
{
|
||||
void f() {}
|
||||
void fc() const {}
|
||||
void fv() volatile {}
|
||||
void fcv() const volatile {}
|
||||
};
|
||||
|
||||
template< class C, class F > void test_cv_qual(F C::*)
|
||||
{
|
||||
BOOST_CHECK_INTEGRAL_CONSTANT(boost::is_function< F >::value, true);
|
||||
}
|
||||
|
||||
TT_TEST_BEGIN(is_function)
|
||||
|
||||
typedef void foo0_t();
|
||||
@ -72,6 +85,15 @@ BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_function<sfoo4_t>::value, true);
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
||||
|
||||
test_cv_qual(&X::f);
|
||||
test_cv_qual(&X::fc);
|
||||
test_cv_qual(&X::fv);
|
||||
test_cv_qual(&X::fcv);
|
||||
|
||||
#endif
|
||||
|
||||
TT_TEST_END
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user