2 // Copyright 2000 John Maddock (john@johnmaddock.co.uk)
3 // Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com)
5 // Use, modification and distribution are subject to the Boost Software License,
6 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt).
9 // See http://www.boost.org/libs/type_traits for most recent version including documentation.
11 #ifndef BOOST_TT_IS_FUNCTION_CXX_11_HPP_INCLUDED
12 #define BOOST_TT_IS_FUNCTION_CXX_11_HPP_INCLUDED
14 #include <boost/type_traits/integral_constant.hpp>
19 struct is_function : public false_type {};
21 #if defined(__cpp_noexcept_function_type) && !defined(BOOST_TT_NO_DEDUCED_NOEXCEPT_PARAM)
22 #define BOOST_TT_NOEXCEPT_PARAM , bool NE
23 #define BOOST_TT_NOEXCEPT_DECL noexcept(NE)
25 #define BOOST_TT_NOEXCEPT_PARAM
26 #define BOOST_TT_NOEXCEPT_DECL
30 #define BOOST_TT_DEF_CALL __cdecl
32 #define BOOST_TT_DEF_CALL
35 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
36 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
37 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
38 struct is_function<Ret(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
40 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
41 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
42 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
43 struct is_function<Ret(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
45 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
46 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
47 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
48 struct is_function<Ret(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
50 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
51 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
52 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
53 struct is_function<Ret(Args..., ...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
55 // Reference qualified:
57 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
58 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
59 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
60 struct is_function<Ret(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
62 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
63 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
64 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
65 struct is_function<Ret(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
67 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
68 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
69 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
70 struct is_function<Ret(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
72 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
73 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
74 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
75 struct is_function<Ret(Args..., ...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
77 // rvalue reference qualified:
79 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
80 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)&& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
81 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
82 struct is_function<Ret(Args..., ...)&& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
84 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
85 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
86 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
87 struct is_function<Ret(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
89 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
90 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
91 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
92 struct is_function<Ret(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
94 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
95 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
96 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
97 struct is_function<Ret(Args..., ...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
99 #if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
101 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
102 struct is_function<Ret __clrcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
105 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
106 struct is_function<Ret __stdcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
108 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
109 struct is_function<Ret __fastcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
112 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
113 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
114 struct is_function<Ret __vectorcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
118 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
119 struct is_function<Ret __clrcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
122 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
123 struct is_function<Ret __stdcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
125 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
126 struct is_function<Ret __fastcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
129 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
130 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
131 struct is_function<Ret __vectorcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
135 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
136 struct is_function<Ret __clrcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
139 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
140 struct is_function<Ret __stdcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
142 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
143 struct is_function<Ret __fastcall(Args...)volatile 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...Args BOOST_TT_NOEXCEPT_PARAM>
148 struct is_function<Ret __vectorcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
152 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
153 struct is_function<Ret __clrcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
156 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
157 struct is_function<Ret __stdcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
159 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
160 struct is_function<Ret __fastcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
163 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
164 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
165 struct is_function<Ret __vectorcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
168 // reference qualified:
170 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
171 struct is_function<Ret __clrcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
174 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
175 struct is_function<Ret __stdcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
177 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
178 struct is_function<Ret __fastcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
181 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
182 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
183 struct is_function<Ret __vectorcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
187 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
188 struct is_function<Ret __clrcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
191 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
192 struct is_function<Ret __stdcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
194 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
195 struct is_function<Ret __fastcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
198 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
199 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
200 struct is_function<Ret __vectorcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
204 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
205 struct is_function<Ret __clrcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
208 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
209 struct is_function<Ret __stdcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
211 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
212 struct is_function<Ret __fastcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
215 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
216 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
217 struct is_function<Ret __vectorcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
221 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
222 struct is_function<Ret __clrcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
225 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
226 struct is_function<Ret __stdcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
228 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
229 struct is_function<Ret __fastcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
232 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
233 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
234 struct is_function<Ret __vectorcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
237 // rvalue reference qualified:
239 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
240 struct is_function<Ret __clrcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
243 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
244 struct is_function<Ret __stdcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
246 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
247 struct is_function<Ret __fastcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
250 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
251 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
252 struct is_function<Ret __vectorcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
256 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
257 struct is_function<Ret __clrcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
260 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
261 struct is_function<Ret __stdcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
263 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
264 struct is_function<Ret __fastcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
267 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
268 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
269 struct is_function<Ret __vectorcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
273 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
274 struct is_function<Ret __clrcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
277 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
278 struct is_function<Ret __stdcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
280 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
281 struct is_function<Ret __fastcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
284 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
285 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
286 struct is_function<Ret __vectorcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
290 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
291 struct is_function<Ret __clrcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
294 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
295 struct is_function<Ret __stdcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
297 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
298 struct is_function<Ret __fastcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
301 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
302 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
303 struct is_function<Ret __vectorcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
308 // All over again for msvc with noexcept:
310 #if defined(BOOST_TT_NO_DEDUCED_NOEXCEPT_PARAM) && !defined(BOOST_TT_NO_NOEXCEPT_SEPARATE_TYPE)
312 #undef BOOST_TT_NOEXCEPT_DECL
313 #define BOOST_TT_NOEXCEPT_DECL noexcept
315 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
316 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
317 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
318 struct is_function<Ret(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
320 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
321 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
322 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
323 struct is_function<Ret(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
325 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
326 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
327 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
328 struct is_function<Ret(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
330 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
331 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
332 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
333 struct is_function<Ret(Args..., ...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
335 // Reference qualified:
337 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
338 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
339 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
340 struct is_function<Ret(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
342 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
343 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
344 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
345 struct is_function<Ret(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
347 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
348 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
349 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
350 struct is_function<Ret(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
352 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
353 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
354 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
355 struct is_function<Ret(Args..., ...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
357 // rvalue reference qualified:
359 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
360 struct is_function<Ret BOOST_TT_DEF_CALL(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
361 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
362 struct is_function<Ret(Args..., ...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
364 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
365 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
366 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
367 struct is_function<Ret(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
369 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
370 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
371 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
372 struct is_function<Ret(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
374 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
375 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
376 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
377 struct is_function<Ret(Args..., ...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
379 #if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
381 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
382 struct is_function<Ret __clrcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
385 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
386 struct is_function<Ret __stdcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
388 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
389 struct is_function<Ret __fastcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
392 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
393 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
394 struct is_function<Ret __vectorcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
398 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
399 struct is_function<Ret __clrcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
402 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
403 struct is_function<Ret __stdcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
405 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
406 struct is_function<Ret __fastcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
409 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
410 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
411 struct is_function<Ret __vectorcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
415 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
416 struct is_function<Ret __clrcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
419 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
420 struct is_function<Ret __stdcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
422 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
423 struct is_function<Ret __fastcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
426 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
427 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
428 struct is_function<Ret __vectorcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
432 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
433 struct is_function<Ret __clrcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
436 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
437 struct is_function<Ret __stdcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
439 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
440 struct is_function<Ret __fastcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
443 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
444 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
445 struct is_function<Ret __vectorcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
448 // reference qualified:
450 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
451 struct is_function<Ret __clrcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
454 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
455 struct is_function<Ret __stdcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
457 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
458 struct is_function<Ret __fastcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
461 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
462 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
463 struct is_function<Ret __vectorcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
467 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
468 struct is_function<Ret __clrcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
471 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
472 struct is_function<Ret __stdcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
474 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
475 struct is_function<Ret __fastcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
478 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
479 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
480 struct is_function<Ret __vectorcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
484 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
485 struct is_function<Ret __clrcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
488 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
489 struct is_function<Ret __stdcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
491 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
492 struct is_function<Ret __fastcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
495 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
496 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
497 struct is_function<Ret __vectorcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
501 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
502 struct is_function<Ret __clrcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
505 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
506 struct is_function<Ret __stdcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
508 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
509 struct is_function<Ret __fastcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
512 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
513 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
514 struct is_function<Ret __vectorcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
517 // rvalue reference qualified:
519 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
520 struct is_function<Ret __clrcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
523 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
524 struct is_function<Ret __stdcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
526 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
527 struct is_function<Ret __fastcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
530 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
531 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
532 struct is_function<Ret __vectorcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
536 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
537 struct is_function<Ret __clrcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
540 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
541 struct is_function<Ret __stdcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
543 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
544 struct is_function<Ret __fastcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
547 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
548 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
549 struct is_function<Ret __vectorcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
553 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
554 struct is_function<Ret __clrcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
557 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
558 struct is_function<Ret __stdcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
560 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
561 struct is_function<Ret __fastcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
564 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
565 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
566 struct is_function<Ret __vectorcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
570 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
571 struct is_function<Ret __clrcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
574 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
575 struct is_function<Ret __stdcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
577 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
578 struct is_function<Ret __fastcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
581 #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
582 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
583 struct is_function<Ret __vectorcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
586 #endif // defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
592 #undef BOOST_TT_NOEXCEPT_DECL
593 #undef BOOST_TT_NOEXCEPT_PARAM
594 #undef BOOST_TT_DEF_CALL
596 #endif // BOOST_TT_IS_FUNCTION_CXX_11_HPP_INCLUDED