1
2// Copyright 2000 John Maddock (john@johnmaddock.co.uk)
3// Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com)
4//
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).
8//
9// See http://www.boost.org/libs/type_traits for most recent version including documentation.
10
11#ifndef BOOST_TT_IS_FUNCTION_CXX_11_HPP_INCLUDED
12#define BOOST_TT_IS_FUNCTION_CXX_11_HPP_INCLUDED
13
14#include <boost/type_traits/integral_constant.hpp>
15
16namespace boost {
17
18 template <class T>
19 struct is_function : public false_type {};
20
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)
24#else
25#define BOOST_TT_NOEXCEPT_PARAM
26#define BOOST_TT_NOEXCEPT_DECL
27#endif
28
29#ifdef _MSC_VER
30#define BOOST_TT_DEF_CALL __cdecl
31#else
32#define BOOST_TT_DEF_CALL
33#endif
34
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 {};
39 // const qualified:
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 {};
44 // volatile:
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 {};
49 // const volatile
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 {};
54
55 // Reference qualified:
56
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 {};
61 // const qualified:
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 {};
66 // volatile:
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 {};
71 // const volatile
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 {};
76
77 // rvalue reference qualified:
78
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 {};
83 // const qualified:
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 {};
88 // volatile:
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 {};
93 // const volatile
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 {};
98
99#if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
100#ifdef __CLR_VER
101 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
102 struct is_function<Ret __clrcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
103#endif
104#ifndef _M_AMD64
105 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
106 struct is_function<Ret __stdcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
107#ifndef __CLR_VER
108 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
109 struct is_function<Ret __fastcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
110#endif
111#endif
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 {};
115#endif
116 // const:
117#ifdef __CLR_VER
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 {};
120#endif
121#ifndef _M_AMD64
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 {};
124#ifndef __CLR_VER
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 {};
127#endif
128#endif
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 {};
132#endif
133 // volatile:
134#ifdef __CLR_VER
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 {};
137#endif
138#ifndef _M_AMD64
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 {};
141#ifndef __CLR_VER
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 {};
144#endif
145#endif
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 {};
149#endif
150 // const volatile:
151#ifdef __CLR_VER
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 {};
154#endif
155#ifndef _M_AMD64
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 {};
158#ifndef __CLR_VER
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 {};
161#endif
162#endif
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 {};
166#endif
167
168 // reference qualified:
169#ifdef __CLR_VER
170 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
171 struct is_function<Ret __clrcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
172#endif
173#ifndef _M_AMD64
174 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
175 struct is_function<Ret __stdcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
176#ifndef __CLR_VER
177 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
178 struct is_function<Ret __fastcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
179#endif
180#endif
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 {};
184#endif
185 // const:
186#ifdef __CLR_VER
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 {};
189#endif
190#ifndef _M_AMD64
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 {};
193#ifndef __CLR_VER
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 {};
196#endif
197#endif
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 {};
201#endif
202 // volatile:
203#ifdef __CLR_VER
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 {};
206#endif
207#ifndef _M_AMD64
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 {};
210#ifndef __CLR_VER
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 {};
213#endif
214#endif
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 {};
218#endif
219 // const volatile:
220#ifdef __CLR_VER
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 {};
223#endif
224#ifndef _M_AMD64
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 {};
227#ifndef __CLR_VER
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 {};
230#endif
231#endif
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 {};
235#endif
236
237 // rvalue reference qualified:
238#ifdef __CLR_VER
239 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
240 struct is_function<Ret __clrcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
241#endif
242#ifndef _M_AMD64
243 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
244 struct is_function<Ret __stdcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
245#ifndef __CLR_VER
246 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
247 struct is_function<Ret __fastcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
248#endif
249#endif
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 {};
253#endif
254 // const:
255#ifdef __CLR_VER
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 {};
258#endif
259#ifndef _M_AMD64
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 {};
262#ifndef __CLR_VER
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 {};
265#endif
266#endif
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 {};
270#endif
271 // volatile:
272#ifdef __CLR_VER
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 {};
275#endif
276#ifndef _M_AMD64
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 {};
279#ifndef __CLR_VER
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 {};
282#endif
283#endif
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 {};
287#endif
288 // const volatile:
289#ifdef __CLR_VER
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 {};
292#endif
293#ifndef _M_AMD64
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 {};
296#ifndef __CLR_VER
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 {};
299#endif
300#endif
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 {};
304#endif
305
306#endif // _MSC_VER
307
308 // All over again for msvc with noexcept:
309
310#if defined(BOOST_TT_NO_DEDUCED_NOEXCEPT_PARAM) && !defined(BOOST_TT_NO_NOEXCEPT_SEPARATE_TYPE)
311
312#undef BOOST_TT_NOEXCEPT_DECL
313#define BOOST_TT_NOEXCEPT_DECL noexcept
314
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 {};
319 // const qualified:
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 {};
324 // volatile:
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 {};
329 // const volatile
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 {};
334
335 // Reference qualified:
336
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 {};
341 // const qualified:
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 {};
346 // volatile:
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 {};
351 // const volatile
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 {};
356
357 // rvalue reference qualified:
358
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 {};
363 // const qualified:
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 {};
368 // volatile:
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 {};
373 // const volatile
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 {};
378
379#if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
380#ifdef __CLR_VER
381 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
382 struct is_function<Ret __clrcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
383#endif
384#ifndef _M_AMD64
385 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
386 struct is_function<Ret __stdcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
387#ifndef __CLR_VER
388 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
389 struct is_function<Ret __fastcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
390#endif
391#endif
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 {};
395#endif
396 // const:
397#ifdef __CLR_VER
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 {};
400#endif
401#ifndef _M_AMD64
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 {};
404#ifndef __CLR_VER
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 {};
407#endif
408#endif
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 {};
412#endif
413 // volatile:
414#ifdef __CLR_VER
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 {};
417#endif
418#ifndef _M_AMD64
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 {};
421#ifndef __CLR_VER
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 {};
424#endif
425#endif
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 {};
429#endif
430 // const volatile:
431#ifdef __CLR_VER
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 {};
434#endif
435#ifndef _M_AMD64
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 {};
438#ifndef __CLR_VER
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 {};
441#endif
442#endif
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 {};
446#endif
447
448 // reference qualified:
449#ifdef __CLR_VER
450 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
451 struct is_function<Ret __clrcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
452#endif
453#ifndef _M_AMD64
454 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
455 struct is_function<Ret __stdcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
456#ifndef __CLR_VER
457 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
458 struct is_function<Ret __fastcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
459#endif
460#endif
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 {};
464#endif
465 // const:
466#ifdef __CLR_VER
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 {};
469#endif
470#ifndef _M_AMD64
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 {};
473#ifndef __CLR_VER
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 {};
476#endif
477#endif
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 {};
481#endif
482 // volatile:
483#ifdef __CLR_VER
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 {};
486#endif
487#ifndef _M_AMD64
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 {};
490#ifndef __CLR_VER
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 {};
493#endif
494#endif
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 {};
498#endif
499 // const volatile:
500#ifdef __CLR_VER
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 {};
503#endif
504#ifndef _M_AMD64
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 {};
507#ifndef __CLR_VER
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 {};
510#endif
511#endif
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 {};
515#endif
516
517 // rvalue reference qualified:
518#ifdef __CLR_VER
519 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
520 struct is_function<Ret __clrcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
521#endif
522#ifndef _M_AMD64
523 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
524 struct is_function<Ret __stdcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
525#ifndef __CLR_VER
526 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
527 struct is_function<Ret __fastcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
528#endif
529#endif
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 {};
533#endif
534 // const:
535#ifdef __CLR_VER
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 {};
538#endif
539#ifndef _M_AMD64
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 {};
542#ifndef __CLR_VER
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 {};
545#endif
546#endif
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 {};
550#endif
551 // volatile:
552#ifdef __CLR_VER
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 {};
555#endif
556#ifndef _M_AMD64
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 {};
559#ifndef __CLR_VER
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 {};
562#endif
563#endif
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 {};
567#endif
568 // const volatile:
569#ifdef __CLR_VER
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 {};
572#endif
573#ifndef _M_AMD64
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 {};
576#ifndef __CLR_VER
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 {};
579#endif
580#endif
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 {};
584#endif
585
586#endif // defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
587
588#endif
589
590}
591
592#undef BOOST_TT_NOEXCEPT_DECL
593#undef BOOST_TT_NOEXCEPT_PARAM
594#undef BOOST_TT_DEF_CALL
595
596#endif // BOOST_TT_IS_FUNCTION_CXX_11_HPP_INCLUDED
597
598

source code of include/boost/type_traits/detail/is_function_cxx_11.hpp