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 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
36 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
37 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
39 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
40 struct is_function<Ret(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
43 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
44 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
45 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
47 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
48 struct is_function<Ret(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
51 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
52 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
53 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
55 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
56 struct is_function<Ret(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
58 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
59 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
60 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
62 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
63 struct is_function<Ret(Args..., ...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
65 // Reference qualified:
67 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
68 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
69 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
71 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
72 struct is_function<Ret(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
74 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
75 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
76 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
78 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
79 struct is_function<Ret(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
81 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
82 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
83 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
85 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
86 struct is_function<Ret(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
88 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
89 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
90 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
92 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
93 struct is_function<Ret(Args..., ...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
95 // rvalue reference qualified:
97 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
98 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
99 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)&& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
101 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
102 struct is_function<Ret(Args..., ...)&& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
104 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
105 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
106 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
108 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
109 struct is_function<Ret(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
111 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
112 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
113 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
115 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
116 struct is_function<Ret(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
118 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
119 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
120 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
122 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
123 struct is_function<Ret(Args..., ...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
126 #if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
128 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
129 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
130 struct is_function<Ret __stdcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
133 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
134 struct is_function<Ret __clrcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
137 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
138 struct is_function<Ret __fastcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
140 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
141 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
142 struct is_function<Ret __vectorcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
147 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
148 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
149 struct is_function<Ret __stdcall(Args...)const 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 BOOST_TT_NOEXCEPT_DECL> : public true_type {};
156 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
157 struct is_function<Ret __fastcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
159 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
160 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
161 struct is_function<Ret __vectorcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
165 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
166 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
167 struct is_function<Ret __stdcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
170 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
171 struct is_function<Ret __clrcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
174 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
175 struct is_function<Ret __fastcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
177 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
178 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
179 struct is_function<Ret __vectorcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
183 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
184 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
185 struct is_function<Ret __stdcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
188 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
189 struct is_function<Ret __clrcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
192 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
193 struct is_function<Ret __fastcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
195 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
196 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
197 struct is_function<Ret __vectorcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
201 // reference qualified:
202 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
203 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
204 struct is_function<Ret __stdcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
207 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
208 struct is_function<Ret __clrcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
211 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
212 struct is_function<Ret __fastcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
214 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
215 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
216 struct is_function<Ret __vectorcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
220 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
221 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
222 struct is_function<Ret __stdcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
225 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
226 struct is_function<Ret __clrcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
229 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
230 struct is_function<Ret __fastcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
232 #if 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 &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
238 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
239 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
240 struct is_function<Ret __stdcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
243 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
244 struct is_function<Ret __clrcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
247 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
248 struct is_function<Ret __fastcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
250 #if 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...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
256 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
257 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
258 struct is_function<Ret __stdcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
261 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
262 struct is_function<Ret __clrcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
265 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
266 struct is_function<Ret __fastcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
268 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
269 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
270 struct is_function<Ret __vectorcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
274 // rvalue reference qualified:
275 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
276 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
277 struct is_function<Ret __stdcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
280 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
281 struct is_function<Ret __clrcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
284 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
285 struct is_function<Ret __fastcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
287 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
288 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
289 struct is_function<Ret __vectorcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
293 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
294 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
295 struct is_function<Ret __stdcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
298 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
299 struct is_function<Ret __clrcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
302 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
303 struct is_function<Ret __fastcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
305 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
306 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
307 struct is_function<Ret __vectorcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
311 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
312 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
313 struct is_function<Ret __stdcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
316 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
317 struct is_function<Ret __clrcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
320 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
321 struct is_function<Ret __fastcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
323 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
324 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
325 struct is_function<Ret __vectorcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
329 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
330 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
331 struct is_function<Ret __stdcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
334 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
335 struct is_function<Ret __clrcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
338 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
339 struct is_function<Ret __fastcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
341 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
342 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
343 struct is_function<Ret __vectorcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
349 // All over again for msvc with noexcept:
351 #if defined(BOOST_TT_NO_DEDUCED_NOEXCEPT_PARAM) && !defined(BOOST_TT_NO_NOEXCEPT_SEPARATE_TYPE)
353 #undef BOOST_TT_NOEXCEPT_DECL
354 #define BOOST_TT_NOEXCEPT_DECL noexcept
356 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
357 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
358 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
360 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
361 struct is_function<Ret(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
363 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
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 {};
367 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
368 struct is_function<Ret(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
370 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
371 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
372 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
374 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
375 struct is_function<Ret(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
377 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
378 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
379 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
381 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
382 struct is_function<Ret(Args..., ...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
384 // Reference qualified:
386 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
387 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
388 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
390 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
391 struct is_function<Ret(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
393 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
394 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
395 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
397 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
398 struct is_function<Ret(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
400 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
401 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
402 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
404 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
405 struct is_function<Ret(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
407 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
408 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
409 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
411 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
412 struct is_function<Ret(Args..., ...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
414 // rvalue reference qualified:
416 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
417 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
418 struct is_function<Ret BOOST_TT_DEF_CALL(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
420 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
421 struct is_function<Ret(Args..., ...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
423 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
424 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
425 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
427 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
428 struct is_function<Ret(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
430 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
431 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
432 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
434 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
435 struct is_function<Ret(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
437 #if !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
438 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
439 struct is_function<Ret BOOST_TT_DEF_CALL(Args...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
441 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
442 struct is_function<Ret(Args..., ...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
445 #if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
447 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
448 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
449 struct is_function<Ret __stdcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
452 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
453 struct is_function<Ret __clrcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
456 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
457 struct is_function<Ret __fastcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
459 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
460 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
461 struct is_function<Ret __vectorcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
465 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
466 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
467 struct is_function<Ret __stdcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
470 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
471 struct is_function<Ret __clrcall(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 {};
477 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
478 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
479 struct is_function<Ret __vectorcall(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
483 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
484 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
485 struct is_function<Ret __stdcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
488 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
489 struct is_function<Ret __clrcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
492 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
493 struct is_function<Ret __fastcall(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
495 #if 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 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
502 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
503 struct is_function<Ret __stdcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
506 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
507 struct is_function<Ret __clrcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
510 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
511 struct is_function<Ret __fastcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
513 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
514 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
515 struct is_function<Ret __vectorcall(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
519 // reference qualified:
520 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
521 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
522 struct is_function<Ret __stdcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
525 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
526 struct is_function<Ret __clrcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
529 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
530 struct is_function<Ret __fastcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
532 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
533 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
534 struct is_function<Ret __vectorcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
538 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
539 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
540 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 __clrcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
547 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
548 struct is_function<Ret __fastcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
550 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
551 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
552 struct is_function<Ret __vectorcall(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
556 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
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 {};
561 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
562 struct is_function<Ret __clrcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
565 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
566 struct is_function<Ret __fastcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
568 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
569 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
570 struct is_function<Ret __vectorcall(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
574 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
575 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
576 struct is_function<Ret __stdcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
579 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
580 struct is_function<Ret __clrcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
583 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
584 struct is_function<Ret __fastcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
586 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
587 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
588 struct is_function<Ret __vectorcall(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
592 // rvalue reference qualified:
593 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
594 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
595 struct is_function<Ret __stdcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
598 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
599 struct is_function<Ret __clrcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
602 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
603 struct is_function<Ret __fastcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
605 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
606 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
607 struct is_function<Ret __vectorcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
611 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
612 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
613 struct is_function<Ret __stdcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
616 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
617 struct is_function<Ret __clrcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
620 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
621 struct is_function<Ret __fastcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
623 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
624 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
625 struct is_function<Ret __vectorcall(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
629 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
630 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
631 struct is_function<Ret __stdcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
634 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
635 struct is_function<Ret __clrcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
638 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
639 struct is_function<Ret __fastcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
641 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
642 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
643 struct is_function<Ret __vectorcall(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
647 #if !defined(_M_X64) && !defined(_M_CEE_SAFE) && !defined(_M_CEE_PURE)
648 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
649 struct is_function<Ret __stdcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
652 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
653 struct is_function<Ret __clrcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
656 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
657 struct is_function<Ret __fastcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
659 #if defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64)
660 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
661 struct is_function<Ret __vectorcall(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
665 #endif // defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
671 #undef BOOST_TT_NOEXCEPT_DECL
672 #undef BOOST_TT_NOEXCEPT_PARAM
673 #undef BOOST_TT_DEF_CALL
675 #endif // BOOST_TT_IS_FUNCTION_CXX_11_HPP_INCLUDED