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#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 {};
38#endif
39 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
40 struct is_function<Ret(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
41 // const qualified:
42
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 {};
46#endif
47 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
48 struct is_function<Ret(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
49 // volatile:
50
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 {};
54#endif
55 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
56 struct is_function<Ret(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
57 // const volatile
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 {};
61#endif
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 {};
64
65 // Reference qualified:
66
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 {};
70#endif
71 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
72 struct is_function<Ret(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
73 // const qualified:
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 {};
77#endif
78 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
79 struct is_function<Ret(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
80 // volatile:
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 {};
84#endif
85 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
86 struct is_function<Ret(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
87 // const volatile
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 {};
91#endif
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 {};
94
95 // rvalue reference qualified:
96
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 {};
100#endif
101 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
102 struct is_function<Ret(Args..., ...)&& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
103 // const qualified:
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 {};
107#endif
108 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
109 struct is_function<Ret(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
110 // volatile:
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 {};
114#endif
115 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
116 struct is_function<Ret(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
117 // const volatile
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 {};
121#endif
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 {};
124
125
126#if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
127
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 {};
131#endif
132#ifdef _MANAGED
133 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
134 struct is_function<Ret __clrcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
135#else
136#ifndef _M_X64
137 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
138 struct is_function<Ret __fastcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
139#endif
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 {};
143#endif
144#endif
145 // const:
146
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 {};
150#endif
151#ifdef _MANAGED
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 {};
154#else
155#ifndef _M_AMD64
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 {};
158#endif
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 {};
162#endif
163#endif
164 // volatile:
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 {};
168#endif
169#ifdef _MANAGED
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 {};
172#else
173#ifndef _M_AMD64
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 {};
176#endif
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 {};
180#endif
181#endif
182 // const volatile:
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 {};
186#endif
187#ifdef _MANAGED
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 {};
190#else
191#ifndef _M_AMD64
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 {};
194#endif
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 {};
198#endif
199#endif
200
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 {};
205#endif
206#ifdef _MANAGED
207 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
208 struct is_function<Ret __clrcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
209#else
210#ifndef _M_AMD64
211 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
212 struct is_function<Ret __fastcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
213#endif
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 {};
217#endif
218#endif
219 // const:
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 {};
223#endif
224#ifdef _MANAGED
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 {};
227#else
228#ifndef _M_AMD64
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 {};
231#endif
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 {};
235#endif
236#endif
237 // volatile:
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 {};
241#endif
242#ifdef _MANAGED
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 {};
245#else
246#ifndef _M_AMD64
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 {};
249#endif
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 {};
253#endif
254#endif
255 // const volatile:
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 {};
259#endif
260#ifdef _MANAGED
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 {};
263#else
264#ifndef _M_AMD64
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 {};
267#endif
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 {};
271#endif
272#endif
273
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 {};
278#endif
279#ifdef _MANAGED
280 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
281 struct is_function<Ret __clrcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
282#else
283#ifndef _M_AMD64
284 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
285 struct is_function<Ret __fastcall(Args...)&&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
286#endif
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 {};
290#endif
291#endif
292 // const:
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 {};
296#endif
297#ifdef _MANAGED
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 {};
300#else
301#ifndef _M_AMD64
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 {};
304#endif
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 {};
308#endif
309#endif
310 // volatile:
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 {};
314#endif
315#ifdef _MANAGED
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 {};
318#else
319#ifndef _M_AMD64
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 {};
322#endif
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 {};
326#endif
327#endif
328 // const volatile:
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 {};
332#endif
333#ifdef _MANAGED
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 {};
336#else
337#ifndef _M_AMD64
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 {};
340#endif
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 {};
344#endif
345#endif
346
347#endif // _MSC_VER
348
349 // All over again for msvc with noexcept:
350
351#if defined(BOOST_TT_NO_DEDUCED_NOEXCEPT_PARAM) && !defined(BOOST_TT_NO_NOEXCEPT_SEPARATE_TYPE)
352
353#undef BOOST_TT_NOEXCEPT_DECL
354#define BOOST_TT_NOEXCEPT_DECL noexcept
355
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 {};
359#endif
360 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
361 struct is_function<Ret(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
362 // const qualified:
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 {};
366#endif
367 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
368 struct is_function<Ret(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
369 // volatile:
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 {};
373#endif
374 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
375 struct is_function<Ret(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
376 // const volatile
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 {};
380#endif
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 {};
383
384 // Reference qualified:
385
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 {};
389#endif
390 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
391 struct is_function<Ret(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
392 // const qualified:
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 {};
396#endif
397 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
398 struct is_function<Ret(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
399 // volatile:
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 {};
403#endif
404 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
405 struct is_function<Ret(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
406 // const volatile
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 {};
410#endif
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 {};
413
414 // rvalue reference qualified:
415
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 {};
419#endif
420 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
421 struct is_function<Ret(Args..., ...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
422 // const qualified:
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 {};
426#endif
427 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
428 struct is_function<Ret(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
429 // volatile:
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 {};
433#endif
434 template <class Ret, class ...Args BOOST_TT_NOEXCEPT_PARAM>
435 struct is_function<Ret(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
436 // const volatile
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 {};
440#endif
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 {};
443
444
445#if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
446
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 {};
450#endif
451#ifdef _MANAGED
452 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
453 struct is_function<Ret __clrcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
454#else
455#ifndef _M_AMD64
456 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
457 struct is_function<Ret __fastcall(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
458#endif
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 {};
462#endif
463#endif
464 // const:
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 {};
468#endif
469#ifdef _MANAGED
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 {};
472#else
473#ifndef _M_AMD64
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#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 {};
480#endif
481#endif
482 // volatile:
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 {};
486#endif
487#ifdef _MANAGED
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 {};
490#else
491#ifndef _M_AMD64
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 {};
494#endif
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 {};
498#endif
499#endif
500 // const volatile:
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 {};
504#endif
505#ifdef _MANAGED
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 {};
508#else
509#ifndef _M_AMD64
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 {};
512#endif
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 {};
516#endif
517#endif
518
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 {};
523#endif
524#ifdef _MANAGED
525 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
526 struct is_function<Ret __clrcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
527#else
528#ifndef _M_AMD64
529 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
530 struct is_function<Ret __fastcall(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
531#endif
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 {};
535#endif
536#endif
537 // const:
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 {};
541#endif
542#ifdef _MANAGED
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 {};
545#else
546#ifndef _M_AMD64
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 {};
549#endif
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 {};
553#endif
554#endif
555 // volatile:
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 {};
559#endif
560#ifdef _MANAGED
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 {};
563#else
564#ifndef _M_AMD64
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 {};
567#endif
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 {};
571#endif
572#endif
573 // const volatile:
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 {};
577#endif
578#ifdef _MANAGED
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 {};
581#else
582#ifndef _M_AMD64
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 {};
585#endif
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 {};
589#endif
590#endif
591
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 {};
596#endif
597#ifdef _MANAGED
598 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
599 struct is_function<Ret __clrcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
600#else
601#ifndef _M_AMD64
602 template <class Ret, class...Args BOOST_TT_NOEXCEPT_PARAM>
603 struct is_function<Ret __fastcall(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
604#endif
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 {};
608#endif
609#endif
610 // const:
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 {};
614#endif
615#ifdef _MANAGED
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 {};
618#else
619#ifndef _M_AMD64
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 {};
622#endif
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 {};
626#endif
627#endif
628 // volatile:
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 {};
632#endif
633#ifdef _MANAGED
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 {};
636#else
637#ifndef _M_AMD64
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 {};
640#endif
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 {};
644#endif
645#endif
646 // const volatile:
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 {};
650#endif
651#ifdef _MANAGED
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 {};
654#else
655#ifndef _M_AMD64
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 {};
658#endif
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 {};
662#endif
663#endif
664
665#endif // defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
666
667#endif
668
669}
670
671#undef BOOST_TT_NOEXCEPT_DECL
672#undef BOOST_TT_NOEXCEPT_PARAM
673#undef BOOST_TT_DEF_CALL
674
675#endif // BOOST_TT_IS_FUNCTION_CXX_11_HPP_INCLUDED
676
677

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