libcopp  1.1.0
compiler_features.h
Go to the documentation of this file.
1 
2 // This is a generated file. Do not edit!
3 
4 #ifndef UTIL_CONFIG_COMPILER_DETECTION_H
5 #define UTIL_CONFIG_COMPILER_DETECTION_H
6 
7 #ifdef __cplusplus
8 # define UTIL_CONFIG_COMPILER_IS_Comeau 0
9 # define UTIL_CONFIG_COMPILER_IS_Intel 0
10 # define UTIL_CONFIG_COMPILER_IS_PathScale 0
11 # define UTIL_CONFIG_COMPILER_IS_Embarcadero 0
12 # define UTIL_CONFIG_COMPILER_IS_Borland 0
13 # define UTIL_CONFIG_COMPILER_IS_Watcom 0
14 # define UTIL_CONFIG_COMPILER_IS_OpenWatcom 0
15 # define UTIL_CONFIG_COMPILER_IS_SunPro 0
16 # define UTIL_CONFIG_COMPILER_IS_HP 0
17 # define UTIL_CONFIG_COMPILER_IS_Compaq 0
18 # define UTIL_CONFIG_COMPILER_IS_zOS 0
19 # define UTIL_CONFIG_COMPILER_IS_XL 0
20 # define UTIL_CONFIG_COMPILER_IS_VisualAge 0
21 # define UTIL_CONFIG_COMPILER_IS_PGI 0
22 # define UTIL_CONFIG_COMPILER_IS_Cray 0
23 # define UTIL_CONFIG_COMPILER_IS_TI 0
24 # define UTIL_CONFIG_COMPILER_IS_Fujitsu 0
25 # define UTIL_CONFIG_COMPILER_IS_SCO 0
26 # define UTIL_CONFIG_COMPILER_IS_AppleClang 0
27 # define UTIL_CONFIG_COMPILER_IS_Clang 0
28 # define UTIL_CONFIG_COMPILER_IS_GNU 0
29 # define UTIL_CONFIG_COMPILER_IS_MSVC 0
30 # define UTIL_CONFIG_COMPILER_IS_ADSP 0
31 # define UTIL_CONFIG_COMPILER_IS_IAR 0
32 # define UTIL_CONFIG_COMPILER_IS_ARMCC 0
33 # define UTIL_CONFIG_COMPILER_IS_MIPSpro 0
34 
35 #if defined(__COMO__)
36 # undef UTIL_CONFIG_COMPILER_IS_Comeau
37 # define UTIL_CONFIG_COMPILER_IS_Comeau 1
38 
39 #elif defined(__INTEL_COMPILER) || defined(__ICC)
40 # undef UTIL_CONFIG_COMPILER_IS_Intel
41 # define UTIL_CONFIG_COMPILER_IS_Intel 1
42 
43 #elif defined(__PATHCC__)
44 # undef UTIL_CONFIG_COMPILER_IS_PathScale
45 # define UTIL_CONFIG_COMPILER_IS_PathScale 1
46 
47 #elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
48 # undef UTIL_CONFIG_COMPILER_IS_Embarcadero
49 # define UTIL_CONFIG_COMPILER_IS_Embarcadero 1
50 
51 #elif defined(__BORLANDC__)
52 # undef UTIL_CONFIG_COMPILER_IS_Borland
53 # define UTIL_CONFIG_COMPILER_IS_Borland 1
54 
55 #elif defined(__WATCOMC__) && __WATCOMC__ < 1200
56 # undef UTIL_CONFIG_COMPILER_IS_Watcom
57 # define UTIL_CONFIG_COMPILER_IS_Watcom 1
58 
59 #elif defined(__WATCOMC__)
60 # undef UTIL_CONFIG_COMPILER_IS_OpenWatcom
61 # define UTIL_CONFIG_COMPILER_IS_OpenWatcom 1
62 
63 #elif defined(__SUNPRO_CC)
64 # undef UTIL_CONFIG_COMPILER_IS_SunPro
65 # define UTIL_CONFIG_COMPILER_IS_SunPro 1
66 
67 #elif defined(__HP_aCC)
68 # undef UTIL_CONFIG_COMPILER_IS_HP
69 # define UTIL_CONFIG_COMPILER_IS_HP 1
70 
71 #elif defined(__DECCXX)
72 # undef UTIL_CONFIG_COMPILER_IS_Compaq
73 # define UTIL_CONFIG_COMPILER_IS_Compaq 1
74 
75 #elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
76 # undef UTIL_CONFIG_COMPILER_IS_zOS
77 # define UTIL_CONFIG_COMPILER_IS_zOS 1
78 
79 #elif defined(__ibmxl__) || (defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800)
80 # undef UTIL_CONFIG_COMPILER_IS_XL
81 # define UTIL_CONFIG_COMPILER_IS_XL 1
82 
83 #elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
84 # undef UTIL_CONFIG_COMPILER_IS_VisualAge
85 # define UTIL_CONFIG_COMPILER_IS_VisualAge 1
86 
87 #elif defined(__PGI)
88 # undef UTIL_CONFIG_COMPILER_IS_PGI
89 # define UTIL_CONFIG_COMPILER_IS_PGI 1
90 
91 #elif defined(_CRAYC)
92 # undef UTIL_CONFIG_COMPILER_IS_Cray
93 # define UTIL_CONFIG_COMPILER_IS_Cray 1
94 
95 #elif defined(__TI_COMPILER_VERSION__)
96 # undef UTIL_CONFIG_COMPILER_IS_TI
97 # define UTIL_CONFIG_COMPILER_IS_TI 1
98 
99 #elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
100 # undef UTIL_CONFIG_COMPILER_IS_Fujitsu
101 # define UTIL_CONFIG_COMPILER_IS_Fujitsu 1
102 
103 #elif defined(__SCO_VERSION__)
104 # undef UTIL_CONFIG_COMPILER_IS_SCO
105 # define UTIL_CONFIG_COMPILER_IS_SCO 1
106 
107 #elif defined(__clang__) && defined(__apple_build_version__)
108 # undef UTIL_CONFIG_COMPILER_IS_AppleClang
109 # define UTIL_CONFIG_COMPILER_IS_AppleClang 1
110 
111 #elif defined(__clang__)
112 # undef UTIL_CONFIG_COMPILER_IS_Clang
113 # define UTIL_CONFIG_COMPILER_IS_Clang 1
114 
115 #elif defined(__GNUC__) || defined(__GNUG__)
116 # undef UTIL_CONFIG_COMPILER_IS_GNU
117 # define UTIL_CONFIG_COMPILER_IS_GNU 1
118 
119 #elif defined(_MSC_VER)
120 # undef UTIL_CONFIG_COMPILER_IS_MSVC
121 # define UTIL_CONFIG_COMPILER_IS_MSVC 1
122 
123 #elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
124 # undef UTIL_CONFIG_COMPILER_IS_ADSP
125 # define UTIL_CONFIG_COMPILER_IS_ADSP 1
126 
127 #elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
128 # undef UTIL_CONFIG_COMPILER_IS_IAR
129 # define UTIL_CONFIG_COMPILER_IS_IAR 1
130 
131 #elif defined(__ARMCC_VERSION)
132 # undef UTIL_CONFIG_COMPILER_IS_ARMCC
133 # define UTIL_CONFIG_COMPILER_IS_ARMCC 1
134 
135 #elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)
136 # undef UTIL_CONFIG_COMPILER_IS_MIPSpro
137 # define UTIL_CONFIG_COMPILER_IS_MIPSpro 1
138 
139 
140 #endif
141 
142 # if UTIL_CONFIG_COMPILER_IS_GNU
143 
144 # if !((__GNUC__ * 100 + __GNUC_MINOR__) >= 404)
145 # error Unsupported compiler version
146 # endif
147 
148 # if defined(__GNUC__)
149 # define UTIL_CONFIG_COMPILER_VERSION_MAJOR (__GNUC__)
150 # else
151 # define UTIL_CONFIG_COMPILER_VERSION_MAJOR (__GNUG__)
152 # endif
153 # if defined(__GNUC_MINOR__)
154 # define UTIL_CONFIG_COMPILER_VERSION_MINOR (__GNUC_MINOR__)
155 # endif
156 # if defined(__GNUC_PATCHLEVEL__)
157 # define UTIL_CONFIG_COMPILER_VERSION_PATCH (__GNUC_PATCHLEVEL__)
158 # endif
159 
160 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
161 # define UTIL_CONFIG_COMPILER_CXX_AUTO_TYPE 1
162 # else
163 # define UTIL_CONFIG_COMPILER_CXX_AUTO_TYPE 0
164 # endif
165 
166 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
167 # define UTIL_CONFIG_COMPILER_CXX_CONSTEXPR 1
168 # else
169 # define UTIL_CONFIG_COMPILER_CXX_CONSTEXPR 0
170 # endif
171 
172 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
173 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE 1
174 # else
175 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE 0
176 # endif
177 
178 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
179 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE_AUTO 1
180 # else
181 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE_AUTO 0
182 # endif
183 
184 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
185 # define UTIL_CONFIG_COMPILER_CXX_DEFAULTED_FUNCTIONS 1
186 # else
187 # define UTIL_CONFIG_COMPILER_CXX_DEFAULTED_FUNCTIONS 0
188 # endif
189 
190 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
191 # define UTIL_CONFIG_COMPILER_CXX_DELETED_FUNCTIONS 1
192 # else
193 # define UTIL_CONFIG_COMPILER_CXX_DELETED_FUNCTIONS 0
194 # endif
195 
196 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
197 # define UTIL_CONFIG_COMPILER_CXX_FINAL 1
198 # else
199 # define UTIL_CONFIG_COMPILER_CXX_FINAL 0
200 # endif
201 
202 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
203 # define UTIL_CONFIG_COMPILER_CXX_OVERRIDE 1
204 # else
205 # define UTIL_CONFIG_COMPILER_CXX_OVERRIDE 0
206 # endif
207 
208 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
209 # define UTIL_CONFIG_COMPILER_CXX_RANGE_FOR 1
210 # else
211 # define UTIL_CONFIG_COMPILER_CXX_RANGE_FOR 0
212 # endif
213 
214 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
215 # define UTIL_CONFIG_COMPILER_CXX_NOEXCEPT 1
216 # else
217 # define UTIL_CONFIG_COMPILER_CXX_NOEXCEPT 0
218 # endif
219 
220 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
221 # define UTIL_CONFIG_COMPILER_CXX_NULLPTR 1
222 # else
223 # define UTIL_CONFIG_COMPILER_CXX_NULLPTR 0
224 # endif
225 
226 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
227 # define UTIL_CONFIG_COMPILER_CXX_RVALUE_REFERENCES 1
228 # else
229 # define UTIL_CONFIG_COMPILER_CXX_RVALUE_REFERENCES 0
230 # endif
231 
232 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
233 # define UTIL_CONFIG_COMPILER_CXX_STATIC_ASSERT 1
234 # else
235 # define UTIL_CONFIG_COMPILER_CXX_STATIC_ASSERT 0
236 # endif
237 
238 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
239 # define UTIL_CONFIG_COMPILER_CXX_THREAD_LOCAL 1
240 # else
241 # define UTIL_CONFIG_COMPILER_CXX_THREAD_LOCAL 0
242 # endif
243 
244 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
245 # define UTIL_CONFIG_COMPILER_CXX_VARIADIC_TEMPLATES 1
246 # else
247 # define UTIL_CONFIG_COMPILER_CXX_VARIADIC_TEMPLATES 0
248 # endif
249 
250 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
251 # define UTIL_CONFIG_COMPILER_CXX_LAMBDAS 1
252 # else
253 # define UTIL_CONFIG_COMPILER_CXX_LAMBDAS 0
254 # endif
255 
256 # elif UTIL_CONFIG_COMPILER_IS_Clang
257 
258 # if !(((__clang_major__ * 100) + __clang_minor__) >= 301)
259 # error Unsupported compiler version
260 # endif
261 
262 # define UTIL_CONFIG_COMPILER_VERSION_MAJOR (__clang_major__)
263 # define UTIL_CONFIG_COMPILER_VERSION_MINOR (__clang_minor__)
264 # define UTIL_CONFIG_COMPILER_VERSION_PATCH (__clang_patchlevel__)
265 # if defined(_MSC_VER)
266  /* _MSC_VER = VVRR */
267 # define UTIL_CONFIG_SIMULATE_VERSION_MAJOR (_MSC_VER / 100)
268 # define UTIL_CONFIG_SIMULATE_VERSION_MINOR (_MSC_VER % 100)
269 # endif
270 
271 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_auto_type)
272 # define UTIL_CONFIG_COMPILER_CXX_AUTO_TYPE 1
273 # else
274 # define UTIL_CONFIG_COMPILER_CXX_AUTO_TYPE 0
275 # endif
276 
277 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_constexpr)
278 # define UTIL_CONFIG_COMPILER_CXX_CONSTEXPR 1
279 # else
280 # define UTIL_CONFIG_COMPILER_CXX_CONSTEXPR 0
281 # endif
282 
283 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_decltype)
284 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE 1
285 # else
286 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE 0
287 # endif
288 
289 # if ((__clang_major__ * 100) + __clang_minor__) >= 304 && __cplusplus > 201103L
290 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE_AUTO 1
291 # else
292 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE_AUTO 0
293 # endif
294 
295 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_defaulted_functions)
296 # define UTIL_CONFIG_COMPILER_CXX_DEFAULTED_FUNCTIONS 1
297 # else
298 # define UTIL_CONFIG_COMPILER_CXX_DEFAULTED_FUNCTIONS 0
299 # endif
300 
301 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_deleted_functions)
302 # define UTIL_CONFIG_COMPILER_CXX_DELETED_FUNCTIONS 1
303 # else
304 # define UTIL_CONFIG_COMPILER_CXX_DELETED_FUNCTIONS 0
305 # endif
306 
307 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_override_control)
308 # define UTIL_CONFIG_COMPILER_CXX_FINAL 1
309 # else
310 # define UTIL_CONFIG_COMPILER_CXX_FINAL 0
311 # endif
312 
313 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_override_control)
314 # define UTIL_CONFIG_COMPILER_CXX_OVERRIDE 1
315 # else
316 # define UTIL_CONFIG_COMPILER_CXX_OVERRIDE 0
317 # endif
318 
319 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_range_for)
320 # define UTIL_CONFIG_COMPILER_CXX_RANGE_FOR 1
321 # else
322 # define UTIL_CONFIG_COMPILER_CXX_RANGE_FOR 0
323 # endif
324 
325 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_noexcept)
326 # define UTIL_CONFIG_COMPILER_CXX_NOEXCEPT 1
327 # else
328 # define UTIL_CONFIG_COMPILER_CXX_NOEXCEPT 0
329 # endif
330 
331 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_nullptr)
332 # define UTIL_CONFIG_COMPILER_CXX_NULLPTR 1
333 # else
334 # define UTIL_CONFIG_COMPILER_CXX_NULLPTR 0
335 # endif
336 
337 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_rvalue_references)
338 # define UTIL_CONFIG_COMPILER_CXX_RVALUE_REFERENCES 1
339 # else
340 # define UTIL_CONFIG_COMPILER_CXX_RVALUE_REFERENCES 0
341 # endif
342 
343 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_static_assert)
344 # define UTIL_CONFIG_COMPILER_CXX_STATIC_ASSERT 1
345 # else
346 # define UTIL_CONFIG_COMPILER_CXX_STATIC_ASSERT 0
347 # endif
348 
349 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_thread_local)
350 # define UTIL_CONFIG_COMPILER_CXX_THREAD_LOCAL 1
351 # else
352 # define UTIL_CONFIG_COMPILER_CXX_THREAD_LOCAL 0
353 # endif
354 
355 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_variadic_templates)
356 # define UTIL_CONFIG_COMPILER_CXX_VARIADIC_TEMPLATES 1
357 # else
358 # define UTIL_CONFIG_COMPILER_CXX_VARIADIC_TEMPLATES 0
359 # endif
360 
361 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_lambdas)
362 # define UTIL_CONFIG_COMPILER_CXX_LAMBDAS 1
363 # else
364 # define UTIL_CONFIG_COMPILER_CXX_LAMBDAS 0
365 # endif
366 
367 # elif UTIL_CONFIG_COMPILER_IS_AppleClang
368 
369 # if !(((__clang_major__ * 100) + __clang_minor__) >= 400)
370 # error Unsupported compiler version
371 # endif
372 
373 # define UTIL_CONFIG_COMPILER_VERSION_MAJOR (__clang_major__)
374 # define UTIL_CONFIG_COMPILER_VERSION_MINOR (__clang_minor__)
375 # define UTIL_CONFIG_COMPILER_VERSION_PATCH (__clang_patchlevel__)
376 # if defined(_MSC_VER)
377  /* _MSC_VER = VVRR */
378 # define UTIL_CONFIG_SIMULATE_VERSION_MAJOR (_MSC_VER / 100)
379 # define UTIL_CONFIG_SIMULATE_VERSION_MINOR (_MSC_VER % 100)
380 # endif
381 # define UTIL_CONFIG_COMPILER_VERSION_TWEAK (__apple_build_version__)
382 
383 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_auto_type)
384 # define UTIL_CONFIG_COMPILER_CXX_AUTO_TYPE 1
385 # else
386 # define UTIL_CONFIG_COMPILER_CXX_AUTO_TYPE 0
387 # endif
388 
389 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_constexpr)
390 # define UTIL_CONFIG_COMPILER_CXX_CONSTEXPR 1
391 # else
392 # define UTIL_CONFIG_COMPILER_CXX_CONSTEXPR 0
393 # endif
394 
395 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_decltype)
396 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE 1
397 # else
398 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE 0
399 # endif
400 
401 # if ((__clang_major__ * 100) + __clang_minor__) >= 501 && __cplusplus > 201103L
402 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE_AUTO 1
403 # else
404 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE_AUTO 0
405 # endif
406 
407 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_defaulted_functions)
408 # define UTIL_CONFIG_COMPILER_CXX_DEFAULTED_FUNCTIONS 1
409 # else
410 # define UTIL_CONFIG_COMPILER_CXX_DEFAULTED_FUNCTIONS 0
411 # endif
412 
413 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_deleted_functions)
414 # define UTIL_CONFIG_COMPILER_CXX_DELETED_FUNCTIONS 1
415 # else
416 # define UTIL_CONFIG_COMPILER_CXX_DELETED_FUNCTIONS 0
417 # endif
418 
419 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_override_control)
420 # define UTIL_CONFIG_COMPILER_CXX_FINAL 1
421 # else
422 # define UTIL_CONFIG_COMPILER_CXX_FINAL 0
423 # endif
424 
425 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_override_control)
426 # define UTIL_CONFIG_COMPILER_CXX_OVERRIDE 1
427 # else
428 # define UTIL_CONFIG_COMPILER_CXX_OVERRIDE 0
429 # endif
430 
431 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_range_for)
432 # define UTIL_CONFIG_COMPILER_CXX_RANGE_FOR 1
433 # else
434 # define UTIL_CONFIG_COMPILER_CXX_RANGE_FOR 0
435 # endif
436 
437 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_noexcept)
438 # define UTIL_CONFIG_COMPILER_CXX_NOEXCEPT 1
439 # else
440 # define UTIL_CONFIG_COMPILER_CXX_NOEXCEPT 0
441 # endif
442 
443 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_nullptr)
444 # define UTIL_CONFIG_COMPILER_CXX_NULLPTR 1
445 # else
446 # define UTIL_CONFIG_COMPILER_CXX_NULLPTR 0
447 # endif
448 
449 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_rvalue_references)
450 # define UTIL_CONFIG_COMPILER_CXX_RVALUE_REFERENCES 1
451 # else
452 # define UTIL_CONFIG_COMPILER_CXX_RVALUE_REFERENCES 0
453 # endif
454 
455 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_static_assert)
456 # define UTIL_CONFIG_COMPILER_CXX_STATIC_ASSERT 1
457 # else
458 # define UTIL_CONFIG_COMPILER_CXX_STATIC_ASSERT 0
459 # endif
460 
461 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_thread_local)
462 # define UTIL_CONFIG_COMPILER_CXX_THREAD_LOCAL 1
463 # else
464 # define UTIL_CONFIG_COMPILER_CXX_THREAD_LOCAL 0
465 # endif
466 
467 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_variadic_templates)
468 # define UTIL_CONFIG_COMPILER_CXX_VARIADIC_TEMPLATES 1
469 # else
470 # define UTIL_CONFIG_COMPILER_CXX_VARIADIC_TEMPLATES 0
471 # endif
472 
473 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_lambdas)
474 # define UTIL_CONFIG_COMPILER_CXX_LAMBDAS 1
475 # else
476 # define UTIL_CONFIG_COMPILER_CXX_LAMBDAS 0
477 # endif
478 
479 # elif UTIL_CONFIG_COMPILER_IS_MSVC
480 
481 # if !(_MSC_VER >= 1600)
482 # error Unsupported compiler version
483 # endif
484 
485  /* _MSC_VER = VVRR */
486 # define UTIL_CONFIG_COMPILER_VERSION_MAJOR (_MSC_VER / 100)
487 # define UTIL_CONFIG_COMPILER_VERSION_MINOR (_MSC_VER % 100)
488 # if defined(_MSC_FULL_VER)
489 # if _MSC_VER >= 1400
490  /* _MSC_FULL_VER = VVRRPPPPP */
491 # define UTIL_CONFIG_COMPILER_VERSION_PATCH (_MSC_FULL_VER % 100000)
492 # else
493  /* _MSC_FULL_VER = VVRRPPPP */
494 # define UTIL_CONFIG_COMPILER_VERSION_PATCH (_MSC_FULL_VER % 10000)
495 # endif
496 # endif
497 # if defined(_MSC_BUILD)
498 # define UTIL_CONFIG_COMPILER_VERSION_TWEAK (_MSC_BUILD)
499 # endif
500 
501 # if _MSC_VER >= 1600
502 # define UTIL_CONFIG_COMPILER_CXX_AUTO_TYPE 1
503 # else
504 # define UTIL_CONFIG_COMPILER_CXX_AUTO_TYPE 0
505 # endif
506 
507 # if _MSC_VER >= 1900
508 # define UTIL_CONFIG_COMPILER_CXX_CONSTEXPR 1
509 # else
510 # define UTIL_CONFIG_COMPILER_CXX_CONSTEXPR 0
511 # endif
512 
513 # if _MSC_VER >= 1600
514 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE 1
515 # else
516 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE 0
517 # endif
518 
519 # if _MSC_VER >= 1900
520 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE_AUTO 1
521 # else
522 # define UTIL_CONFIG_COMPILER_CXX_DECLTYPE_AUTO 0
523 # endif
524 
525 # if _MSC_VER >= 1800
526 # define UTIL_CONFIG_COMPILER_CXX_DEFAULTED_FUNCTIONS 1
527 # else
528 # define UTIL_CONFIG_COMPILER_CXX_DEFAULTED_FUNCTIONS 0
529 # endif
530 
531 # if _MSC_VER >= 1900
532 # define UTIL_CONFIG_COMPILER_CXX_DELETED_FUNCTIONS 1
533 # else
534 # define UTIL_CONFIG_COMPILER_CXX_DELETED_FUNCTIONS 0
535 # endif
536 
537 # if _MSC_VER >= 1700
538 # define UTIL_CONFIG_COMPILER_CXX_FINAL 1
539 # else
540 # define UTIL_CONFIG_COMPILER_CXX_FINAL 0
541 # endif
542 
543 # if _MSC_VER >= 1600
544 # define UTIL_CONFIG_COMPILER_CXX_OVERRIDE 1
545 # else
546 # define UTIL_CONFIG_COMPILER_CXX_OVERRIDE 0
547 # endif
548 
549 # if _MSC_VER >= 1700
550 # define UTIL_CONFIG_COMPILER_CXX_RANGE_FOR 1
551 # else
552 # define UTIL_CONFIG_COMPILER_CXX_RANGE_FOR 0
553 # endif
554 
555 # if _MSC_VER >= 1900
556 # define UTIL_CONFIG_COMPILER_CXX_NOEXCEPT 1
557 # else
558 # define UTIL_CONFIG_COMPILER_CXX_NOEXCEPT 0
559 # endif
560 
561 # if _MSC_VER >= 1600
562 # define UTIL_CONFIG_COMPILER_CXX_NULLPTR 1
563 # else
564 # define UTIL_CONFIG_COMPILER_CXX_NULLPTR 0
565 # endif
566 
567 # if _MSC_VER >= 1600
568 # define UTIL_CONFIG_COMPILER_CXX_RVALUE_REFERENCES 1
569 # else
570 # define UTIL_CONFIG_COMPILER_CXX_RVALUE_REFERENCES 0
571 # endif
572 
573 # if _MSC_VER >= 1600
574 # define UTIL_CONFIG_COMPILER_CXX_STATIC_ASSERT 1
575 # else
576 # define UTIL_CONFIG_COMPILER_CXX_STATIC_ASSERT 0
577 # endif
578 
579 # if _MSC_VER >= 1900
580 # define UTIL_CONFIG_COMPILER_CXX_THREAD_LOCAL 1
581 # else
582 # define UTIL_CONFIG_COMPILER_CXX_THREAD_LOCAL 0
583 # endif
584 
585 # if _MSC_VER >= 1800
586 # define UTIL_CONFIG_COMPILER_CXX_VARIADIC_TEMPLATES 1
587 # else
588 # define UTIL_CONFIG_COMPILER_CXX_VARIADIC_TEMPLATES 0
589 # endif
590 
591 # if _MSC_VER >= 1600
592 # define UTIL_CONFIG_COMPILER_CXX_LAMBDAS 1
593 # else
594 # define UTIL_CONFIG_COMPILER_CXX_LAMBDAS 0
595 # endif
596 
597 # else
598 # error Unsupported compiler
599 # endif
600 
601 # if defined(UTIL_CONFIG_COMPILER_CXX_CONSTEXPR) && UTIL_CONFIG_COMPILER_CXX_CONSTEXPR
602 # define UTIL_CONFIG_CONSTEXPR constexpr
603 # else
604 # define UTIL_CONFIG_CONSTEXPR
605 # endif
606 
607 
608 # if defined(UTIL_CONFIG_COMPILER_CXX_DELETED_FUNCTIONS) && UTIL_CONFIG_COMPILER_CXX_DELETED_FUNCTIONS
609 # define UTIL_CONFIG_DELETED_FUNCTION = delete
610 # else
611 # define UTIL_CONFIG_DELETED_FUNCTION
612 # endif
613 
614 
615 # if defined(UTIL_CONFIG_COMPILER_CXX_FINAL) && UTIL_CONFIG_COMPILER_CXX_FINAL
616 # define UTIL_CONFIG_FINAL final
617 # else
618 # define UTIL_CONFIG_FINAL
619 # endif
620 
621 
622 # if defined(UTIL_CONFIG_COMPILER_CXX_OVERRIDE) && UTIL_CONFIG_COMPILER_CXX_OVERRIDE
623 # define UTIL_CONFIG_OVERRIDE override
624 # else
625 # define UTIL_CONFIG_OVERRIDE
626 # endif
627 
628 
629 # if defined(UTIL_CONFIG_COMPILER_CXX_NOEXCEPT) && UTIL_CONFIG_COMPILER_CXX_NOEXCEPT
630 # define UTIL_CONFIG_NOEXCEPT noexcept
631 # define UTIL_CONFIG_NOEXCEPT_EXPR(X) noexcept(X)
632 # else
633 # define UTIL_CONFIG_NOEXCEPT
634 # define UTIL_CONFIG_NOEXCEPT_EXPR(X)
635 # endif
636 
637 
638 # if defined(UTIL_CONFIG_COMPILER_CXX_NULLPTR) && UTIL_CONFIG_COMPILER_CXX_NULLPTR
639 # define UTIL_CONFIG_NULLPTR nullptr
640 # elif UTIL_CONFIG_COMPILER_IS_GNU
641 # define UTIL_CONFIG_NULLPTR __null
642 # else
643 # define UTIL_CONFIG_NULLPTR 0
644 # endif
645 
646 # if defined(UTIL_CONFIG_COMPILER_CXX_STATIC_ASSERT) && UTIL_CONFIG_COMPILER_CXX_STATIC_ASSERT
647 # define UTIL_CONFIG_STATIC_ASSERT(X) static_assert(X, #X)
648 # define UTIL_CONFIG_STATIC_ASSERT_MSG(X, MSG) static_assert(X, MSG)
649 # else
650 # define UTIL_CONFIG_STATIC_ASSERT_JOIN(X, Y) UTIL_CONFIG_STATIC_ASSERT_JOIN_IMPL(X, Y)
651 # define UTIL_CONFIG_STATIC_ASSERT_JOIN_IMPL(X, Y) X##Y
652 template<bool> struct UTIL_CONFIGStaticAssert;
653 template<> struct UTIL_CONFIGStaticAssert<true>{};
654 # define UTIL_CONFIG_STATIC_ASSERT(X) enum { UTIL_CONFIG_STATIC_ASSERT_JOIN(UTIL_CONFIGStaticAssertEnum, __LINE__) = sizeof(UTIL_CONFIGStaticAssert<X>) }
655 # define UTIL_CONFIG_STATIC_ASSERT_MSG(X, MSG) enum { UTIL_CONFIG_STATIC_ASSERT_JOIN(UTIL_CONFIGStaticAssertEnum, __LINE__) = sizeof(UTIL_CONFIGStaticAssert<X>) }
656 # endif
657 
658 
659 # if defined(UTIL_CONFIG_COMPILER_CXX_THREAD_LOCAL) && UTIL_CONFIG_COMPILER_CXX_THREAD_LOCAL
660 # define UTIL_CONFIG_THREAD_LOCAL thread_local
661 # elif UTIL_CONFIG_COMPILER_IS_GNU || UTIL_CONFIG_COMPILER_IS_Clang || UTIL_CONFIG_COMPILER_IS_AppleClang
662 # define UTIL_CONFIG_THREAD_LOCAL __thread
663 # elif UTIL_CONFIG_COMPILER_IS_MSVC
664 # define UTIL_CONFIG_THREAD_LOCAL __declspec(thread)
665 # else
666 // UTIL_CONFIG_THREAD_LOCAL not defined for this configuration.
667 # endif
668 
669 #endif
670 
671 #endif