2 // (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
3 // Hinnant & John Maddock 2000.
4 // Use, modification and distribution are subject to the Boost Software License,
5 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt).
8 // See http://www.boost.org/libs/type_traits for most recent version including documentation.
11 #ifndef BOOST_TT_IS_MEMBER_FUNCTION_POINTER_CXX_11_HPP_INCLUDED
12 #define BOOST_TT_IS_MEMBER_FUNCTION_POINTER_CXX_11_HPP_INCLUDED
14 #include <boost/type_traits/integral_constant.hpp>
19 #define BOOST_TT_DEF_CALL __thiscall
21 #define BOOST_TT_DEF_CALL
26 struct is_member_function_pointer : public false_type {};
28 struct is_member_function_pointer<T const> : public is_member_function_pointer<T> {};
30 struct is_member_function_pointer<T volatile> : public is_member_function_pointer<T> {};
32 struct is_member_function_pointer<T const volatile> : public is_member_function_pointer<T> {};
34 #if defined(BOOST_TT_NO_DEDUCED_NOEXCEPT_PARAM)
35 // MSVC can't handle noexcept(b) as a deduced template parameter
36 // so we will have to write everything out :(
37 #define BOOST_TT_NOEXCEPT_PARAM
38 #define BOOST_TT_NOEXCEPT_DECL
39 #elif defined(__cpp_noexcept_function_type)
40 #define BOOST_TT_NOEXCEPT_PARAM , bool NE
41 #define BOOST_TT_NOEXCEPT_DECL noexcept(NE)
43 #define BOOST_TT_NOEXCEPT_PARAM
44 #define BOOST_TT_NOEXCEPT_DECL
47 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
48 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
49 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
50 struct is_member_function_pointer<Ret (C::*)(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
52 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
53 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
54 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
55 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
57 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
58 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
59 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
60 struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
62 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
63 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
64 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
65 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
67 // Reference qualified:
69 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
70 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
71 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
72 struct is_member_function_pointer<Ret(C::*)(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
74 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
75 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
76 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
77 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
79 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
80 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
81 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
82 struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
84 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
85 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
86 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
87 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
89 // rvalue reference qualified:
91 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
92 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
93 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
94 struct is_member_function_pointer<Ret(C::*)(Args..., ...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
96 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
97 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
98 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
99 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
101 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
102 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
103 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
104 struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
106 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
107 struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
108 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
109 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
111 #if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
113 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
114 struct is_member_function_pointer<Ret (__clrcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
117 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
118 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
120 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
121 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
123 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
124 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
126 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
127 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
128 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
133 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
134 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
137 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
138 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
140 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
141 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
143 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
144 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
146 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
147 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
148 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
153 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
154 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
157 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
158 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
160 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
161 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
163 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
164 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
166 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
167 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
168 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
173 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
174 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
177 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
178 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
180 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
181 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
183 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
184 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
186 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
187 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
188 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
191 // reference qualified:
193 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
194 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
197 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
198 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
200 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
201 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
203 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
204 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
206 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
207 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
208 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
213 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
214 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
217 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
218 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
220 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
221 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
223 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
224 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
226 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
227 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
228 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
233 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
234 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
237 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
238 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
240 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
241 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
243 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
244 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
246 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
247 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
248 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
253 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
254 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
257 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
258 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
260 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
261 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
263 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
264 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
266 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
267 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
268 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
271 // rvalue reference qualified:
273 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
274 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
277 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
278 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
280 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
281 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
283 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
284 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
286 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
287 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
288 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
293 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
294 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
297 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
298 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
300 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
301 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
303 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
304 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
306 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
307 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
308 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
313 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
314 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
317 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
318 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
320 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
321 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
323 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
324 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
326 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
327 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
328 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
333 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
334 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
337 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
338 struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
340 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
341 struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
343 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
344 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
346 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
347 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
348 struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
353 #if defined(BOOST_TT_NO_DEDUCED_NOEXCEPT_PARAM) && !defined(BOOST_TT_NO_NOEXCEPT_SEPARATE_TYPE)
355 #undef BOOST_TT_NOEXCEPT_DECL
356 #define BOOST_TT_NOEXCEPT_DECL noexcept
358 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
359 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
360 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
361 struct is_member_function_pointer<Ret(C::*)(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
363 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
364 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
365 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
366 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
368 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
369 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
370 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
371 struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
373 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
374 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
375 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
376 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
378 // Reference qualified:
380 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
381 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
382 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
383 struct is_member_function_pointer<Ret(C::*)(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
385 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
386 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
387 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
388 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
390 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
391 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
392 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
393 struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
395 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
396 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
397 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
398 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
400 // rvalue reference qualified:
402 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
403 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
404 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
405 struct is_member_function_pointer<Ret(C::*)(Args..., ...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
407 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
408 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
409 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
410 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
412 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
413 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
414 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
415 struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
417 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
418 struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
419 template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
420 struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
422 #if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
424 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
425 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
428 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
429 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
431 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
432 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
434 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
435 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
437 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
438 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
439 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
444 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
445 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
448 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
449 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
451 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
452 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
454 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
455 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
457 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
458 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
459 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
464 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
465 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
468 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
469 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
471 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
472 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
474 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
475 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
477 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
478 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
479 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
484 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
485 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
488 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
489 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
491 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
492 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
494 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
495 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
497 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
498 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
499 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
502 // reference qualified:
504 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
505 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
508 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
509 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
511 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
512 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
514 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
515 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
517 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
518 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
519 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
524 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
525 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
528 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
529 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
531 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
532 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
534 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
535 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
537 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
538 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
539 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
544 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
545 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
548 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
549 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
551 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
552 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
554 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
555 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
557 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
558 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
559 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
564 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
565 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
568 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
569 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
571 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
572 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
574 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
575 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
577 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
578 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
579 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
582 // rvalue reference qualified:
584 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
585 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
588 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
589 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
591 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
592 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
594 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
595 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
597 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
598 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
599 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
604 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
605 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
608 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
609 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
611 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
612 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
614 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
615 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
617 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
618 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
619 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
624 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
625 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
628 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
629 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
631 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
632 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
634 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
635 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
637 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
638 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
639 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
644 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
645 struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
649 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
650 struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
652 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
653 struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
655 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
656 struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
658 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
659 template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
660 struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
667 #undef BOOST_TT_NOEXCEPT_DECL
668 #undef BOOST_TT_NOEXCEPT_PARAM
669 #undef BOOST_TT_DEF_CALL
672 #endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_CXX_11_HPP_INCLUDED