15 #ifndef INCG_IRIS_IUTEST_COMPILER_HPP_6DDB27E8_E2FF_4754_80B0_F500025820C4_
16 #define INCG_IRIS_IUTEST_COMPILER_HPP_6DDB27E8_E2FF_4754_80B0_F500025820C4_
24 #if defined(_MSC_VER) && _MSC_VER == 1700
25 # ifndef _VARIADIC_MAX
26 # define _VARIADIC_MAX 10
31 #if defined(__clang__)
32 # if !defined(IUTEST_CLANG_MAJOR)
33 # if defined(__APPLE__)
34 # if __clang_major__ > 11
35 # define IUTEST_CLANG_MAJOR 10
36 # elif __clang_major__ > 10
37 # if __clang_minor__ > 3
38 # define IUTEST_CLANG_MAJOR 9
40 # define IUTEST_CLANG_MAJOR 8
42 # elif __clang_major__ > 9
43 # if __clang_minor__ > 1
44 # define IUTEST_CLANG_MAJOR 7
46 # define IUTEST_CLANG_MAJOR 6
48 # elif __clang_major__ > 8
49 # if __clang_minor__ > 2
50 # define IUTEST_CLANG_MAJOR 5
52 # define IUTEST_CLANG_MAJOR 4
55 # define IUTEST_CLANG_MAJOR 3
56 # if __clang_major__ > 7
57 # define IUTEST_CLANG_MINOR 9
58 # elif __clang_major__ > 6
59 # if __clang_minor__ > 2
60 # define IUTEST_CLANG_MINOR 8
62 # define IUTEST_CLANG_MINOR 7
65 # define IUTEST_CLANG_MINOR __clang_major__
69 # define IUTEST_CLANG_MAJOR __clang_major__
72 # if !defined(IUTEST_CLANG_MINOR)
73 # define IUTEST_CLANG_MINOR __clang_minor__
78 #define IUTEST_CPLUSPLUS_CXX11 201103L
79 #define IUTEST_CPLUSPLUS_CXX14 201402L
80 #define IUTEST_CPLUSPLUS_CXX17 201703L
81 #define IUTEST_CPLUSPLUS_CXX20 202002L
84 #if defined(_MSVC_LANG)
85 # define IUTEST_CPLUSPLUS _MSVC_LANG
86 #elif defined(__cplusplus)
87 # define IUTEST_CPLUSPLUS __cplusplus
89 # define IUTEST_CPLUSPLUS 0
94 #if !defined(IUTEST_HAS_CXX2B)
95 # if IUTEST_CPLUSPLUS > IUTEST_CPLUSPLUS_CXX20
96 # define IUTEST_HAS_CXX2B 1
100 #if !defined(IUTEST_HAS_CXX2B)
101 # define IUTEST_HAS_CXX2B 0
106 #if !defined(IUTEST_HAS_CXX20)
107 # if IUTEST_CPLUSPLUS >= IUTEST_CPLUSPLUS_CXX20
108 # define IUTEST_HAS_CXX20 1
112 #if !defined(IUTEST_HAS_CXX20)
113 # define IUTEST_HAS_CXX20 0
118 #if !defined(IUTEST_HAS_CXX2A)
119 # if IUTEST_CPLUSPLUS > IUTEST_CPLUSPLUS_CXX17
120 # define IUTEST_HAS_CXX2A 1
124 #if !defined(IUTEST_HAS_CXX2A)
125 # define IUTEST_HAS_CXX2A 0
130 #if !defined(IUTEST_HAS_CXX17)
131 # if IUTEST_CPLUSPLUS >= IUTEST_CPLUSPLUS_CXX17
132 # define IUTEST_HAS_CXX17 1
136 #if !defined(IUTEST_HAS_CXX17)
137 # define IUTEST_HAS_CXX17 0
140 #if !defined(IUTEST_HAS_CXX1Z)
141 # if IUTEST_CPLUSPLUS > IUTEST_CPLUSPLUS_CXX14
142 # define IUTEST_HAS_CXX1Z 1
146 #if !defined(IUTEST_HAS_CXX1Z)
147 # define IUTEST_HAS_CXX1Z 0
151 #if !defined(IUTEST_HAS_CXX14)
152 # if IUTEST_CPLUSPLUS >= IUTEST_CPLUSPLUS_CXX14
153 # define IUTEST_HAS_CXX14 1
157 #if !defined(IUTEST_HAS_CXX14)
158 # define IUTEST_HAS_CXX14 0
162 #if !defined(IUTEST_HAS_CXX11)
163 # if (IUTEST_CPLUSPLUS >= IUTEST_CPLUSPLUS_CXX11) || defined(__GXX_EXPERIMENTAL_CXX0X__)
164 # define IUTEST_HAS_CXX11 1
168 #if !defined(IUTEST_HAS_CXX11)
169 # define IUTEST_HAS_CXX11 0
176 #if !defined(IUTEST_HAS_CONCEPTS)
177 # if defined(__cpp_concepts) && __cpp_concepts >= 201907
178 # define IUTEST_HAS_CONCEPTS 1
179 # elif IUTEST_HAS_CXX2A && defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 192328105
180 # define IUTEST_HAS_CONCEPTS 1
184 #if !defined(IUTEST_HAS_CONCEPTS)
185 # define IUTEST_HAS_CONCEPTS 0
191 #if !defined(IUTEST_HAS_INLINE_VARIABLE)
192 #if defined(__cpp_inline_variables) && __cpp_inline_variables >= 201606
193 # define IUTEST_HAS_INLINE_VARIABLE 1
194 #elif defined(__clang__)
195 # if IUTEST_HAS_CXX1Z && (IUTEST_CLANG_MAJOR > 3 || (IUTEST_CLANG_MAJOR == 3 && IUTEST_CLANG_MINOR >= 9))
196 # define IUTEST_HAS_INLINE_VARIABLE 1
201 #if !defined(IUTEST_HAS_INLINE_VARIABLE)
202 # define IUTEST_HAS_INLINE_VARIABLE 0
206 #if !defined(IUTEST_HAS_CONSTEXPR_IF)
207 # if defined(__cpp_if_constexpr) && __cpp_if_constexpr >= 201606
208 # define IUTEST_HAS_CONSTEXPR_IF 1
209 # elif defined(_MSC_VER)
210 # if _MSC_VER >= 1910 && IUTEST_HAS_CXX17
211 # define IUTEST_HAS_CONSTEXPR_IF 1
216 #if !defined(IUTEST_HAS_CONSTEXPR_IF)
217 # define IUTEST_HAS_CONSTEXPR_IF 0
223 #if !defined(IUTEST_HAS_NULLPTR)
224 # if defined(_NATIVE_NULLPTR_SUPPORTED)
225 # define IUTEST_HAS_NULLPTR 1
226 # elif defined(__clang__)
227 # if __has_feature(cxx_nullptr)
228 # define IUTEST_HAS_NULLPTR 1
230 # if (IUTEST_CLANG_MAJOR < 3 || (IUTEST_CLANG_MAJOR == 3 && IUTEST_CLANG_MINOR <= 2))
231 # define IUTEST_NO_NULL_TO_NULLPTR_T 1
233 # elif defined(__INTEL_COMPILER)
234 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER > 1200
235 # define IUTEST_HAS_NULLPTR 1
237 # elif defined(__GNUC__)
238 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
239 # define IUTEST_HAS_NULLPTR 1
241 # elif defined(_MSC_VER)
243 # define IUTEST_HAS_NULLPTR 1
248 #if !defined(IUTEST_HAS_NULLPTR)
249 # define IUTEST_HAS_NULLPTR 0
252 #if !defined(IUTEST_NULLPTR)
253 # if IUTEST_HAS_NULLPTR
254 # define IUTEST_NULLPTR nullptr
256 # define IUTEST_NULLPTR NULL
261 #if !defined(IUTEST_HAS_AUTO)
262 # if defined(__clang__)
263 # if __has_feature(cxx_auto_type)
264 # define IUTEST_HAS_AUTO 1
266 # elif defined(__INTEL_COMPILER)
267 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1200
268 # define IUTEST_HAS_AUTO 1
270 # elif defined(__GNUC__)
271 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
272 # define IUTEST_HAS_AUTO 1
274 # elif defined(_MSC_VER)
275 # if _MSC_VER >= 1600
276 # define IUTEST_HAS_AUTO 1
281 #if !defined(IUTEST_HAS_AUTO)
282 # define IUTEST_HAS_AUTO 0
286 #if !defined(IUTEST_HAS_DECLTYPE)
287 # if defined(__cpp_decltype) && __cpp_decltype >= 200707
288 # define IUTEST_HAS_DECLTYPE 1
289 # elif defined(__clang__)
290 # if __has_feature(cxx_decltype)
291 # define IUTEST_HAS_DECLTYPE 1
293 # elif defined(__INTEL_COMPILER)
294 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1200
295 # define IUTEST_HAS_DECLTYPE 1
297 # elif defined(__GNUC__)
298 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
299 # define IUTEST_HAS_DECLTYPE 1
301 # elif defined(_MSC_VER)
302 # if _MSC_VER >= 1600
303 # define IUTEST_HAS_DECLTYPE 1
308 #if !defined(IUTEST_HAS_DECLTYPE)
309 # define IUTEST_HAS_DECLTYPE 0
313 #if !defined(IUTEST_HAS_STATIC_ASSERT)
314 # if defined(__cpp_static_assert) && __cpp_static_assert >= 200410
315 # define IUTEST_HAS_STATIC_ASSERT 1
316 # elif defined(__clang__)
317 # if __has_feature(cxx_static_assert)
318 # define IUTEST_HAS_STATIC_ASSERT 1
320 # elif defined(__INTEL_COMPILER)
321 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER > 1100
322 # define IUTEST_HAS_STATIC_ASSERT 1
324 # elif defined(__GNUC__)
325 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
326 # define IUTEST_HAS_STATIC_ASSERT 1
328 # elif defined(_MSC_VER)
329 # if _MSC_VER >= 1600
330 # define IUTEST_HAS_STATIC_ASSERT 1
335 #if !defined(IUTEST_HAS_STATIC_ASSERT)
336 # define IUTEST_HAS_STATIC_ASSERT 0
341 #if !defined(IUTEST_HAS_CONSTEXPR)
342 # if defined(__cpp_constexpr) && __cpp_constexpr >= 200704
343 # define IUTEST_HAS_CONSTEXPR 1
344 # elif defined(__clang__)
345 # if __has_feature(cxx_constexpr)
346 # define IUTEST_HAS_CONSTEXPR 1
348 # elif defined(__INTEL_COMPILER)
349 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1400
350 # define IUTEST_HAS_CONSTEXPR 1
352 # elif defined(__GNUC__)
353 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
354 # define IUTEST_HAS_CONSTEXPR 1
356 # elif defined(_MSC_VER)
357 # if _MSC_VER >= 1900 || _MSC_FULL_VER == 180021114
358 # define IUTEST_HAS_CONSTEXPR 1
363 #if !defined(IUTEST_HAS_CONSTEXPR)
364 # define IUTEST_HAS_CONSTEXPR 0
368 #if IUTEST_HAS_CONSTEXPR
369 # define IUTEST_CXX_CONSTEXPR constexpr
371 # define IUTEST_CXX_CONSTEXPR
374 #if IUTEST_HAS_CONSTEXPR && \
375 (defined(__cpp_constexpr) && __cpp_constexpr >= 201304 || IUTEST_HAS_CXX14)
376 # define IUTEST_CXX14_CONSTEXPR constexpr
378 # define IUTEST_CXX14_CONSTEXPR
382 #if IUTEST_HAS_CONSTEXPR
383 # define IUTEST_CXX_CONSTEXPR_OR_CONST constexpr
385 # define IUTEST_CXX_CONSTEXPR_OR_CONST const
389 #if !defined(IUTEST_HAS_RVALUE_REFS)
390 # if defined(__cpp_rvalue_references) && __cpp_rvalue_references >= 200610
391 # define IUTEST_HAS_RVALUE_REFS 1
392 # elif defined(__clang__)
393 # if __has_feature(cxx_rvalue_references)
394 # define IUTEST_HAS_RVALUE_REFS 1
396 # elif defined(__INTEL_COMPILER)
397 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1200
398 # define IUTEST_HAS_RVALUE_REFS 1
400 # elif defined(__GNUC__)
401 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
402 # define IUTEST_HAS_RVALUE_REFS 1
404 # elif defined(_MSC_VER)
405 # if (_MSC_VER >= 1700)
406 # define IUTEST_HAS_RVALUE_REFS 1
411 #if !defined(IUTEST_HAS_RVALUE_REFS)
412 # define IUTEST_HAS_RVALUE_REFS 0
416 #ifndef IUTEST_HAS_DELETED_FUNCTIONS
417 # if defined(__clang__)
418 # if __has_feature(cxx_deleted_functions)
419 # define IUTEST_HAS_DELETED_FUNCTIONS 1
421 # elif defined(__INTEL_COMPILER)
422 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1200
423 # define IUTEST_HAS_DELETED_FUNCTIONS 1
425 # elif defined(__GNUC__)
426 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
427 # define IUTEST_HAS_DELETED_FUNCTIONS 1
429 # elif defined(_MSC_VER)
430 # if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 180020827)
431 # define IUTEST_HAS_DELETED_FUNCTIONS 1
436 #if !defined(IUTEST_HAS_DELETED_FUNCTIONS)
437 # define IUTEST_HAS_DELETED_FUNCTIONS 0
441 #if IUTEST_HAS_DELETED_FUNCTIONS
442 # define IUTEST_CXX_DELETED_FUNCTION = delete
444 # define IUTEST_CXX_DELETED_FUNCTION
447 #if !defined(IUTEST_HAS_MOVE_ASSIGNMENT_DEFAULT_FUNCTION) && !IUTEST_HAS_RVALUE_REFS
448 # define IUTEST_HAS_MOVE_ASSIGNMENT_DEFAULT_FUNCTION 0
452 #if !defined(IUTEST_HAS_DEFAULT_FUNCTIONS)
453 # if defined(__clang__)
454 # if __has_feature(cxx_defaulted_functions)
455 # define IUTEST_HAS_DEFAULT_FUNCTIONS 1
457 # elif defined(__INTEL_COMPILER)
458 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1200
459 # define IUTEST_HAS_DEFAULT_FUNCTIONS 1
461 # elif defined(__GNUC__)
464 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ == 4)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
465 # define IUTEST_HAS_DEFAULT_FUNCTIONS 1
466 # if !defined(IUTEST_HAS_MOVE_ASSIGNMENT_DEFAULT_FUNCTION)
467 # define IUTEST_HAS_MOVE_ASSIGNMENT_DEFAULT_FUNCTION 0
469 # elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
470 # define IUTEST_HAS_DEFAULT_FUNCTIONS 1
472 # elif defined(_MSC_VER)
473 # if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 180020827)
474 # define IUTEST_HAS_DEFAULT_FUNCTIONS 1
475 # if (_MSV_VER <= 1800) && !defined(IUTEST_HAS_MOVE_ASSIGNMENT_DEFAULT_FUNCTION)
476 # define IUTEST_HAS_MOVE_ASSIGNMENT_DEFAULT_FUNCTION 0
482 #if !defined(IUTEST_HAS_DEFAULT_FUNCTIONS)
483 # define IUTEST_HAS_DEFAULT_FUNCTIONS 0
485 #if !defined(IUTEST_HAS_MOVE_ASSIGNMENT_DEFAULT_FUNCTION)
486 # define IUTEST_HAS_MOVE_ASSIGNMENT_DEFAULT_FUNCTION IUTEST_HAS_DEFAULT_FUNCTIONS
490 #if IUTEST_HAS_DEFAULT_FUNCTIONS
491 # define IUTEST_CXX_DEFAULT_FUNCTION = default;
493 # define IUTEST_CXX_DEFAULT_FUNCTION {}
497 #if !defined(IUTEST_HAS_INITIALIZER_LIST)
498 # if defined(__cpp_initializer_lists) && __cpp_initializer_lists >= 200806
499 # define IUTEST_HAS_INITIALIZER_LIST 1
500 # elif defined(__clang__)
501 # if __has_feature(cxx_generalized_initializers)
502 # define IUTEST_HAS_INITIALIZER_LIST 1
504 # elif defined(__INTEL_COMPILER)
505 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1400
506 # define IUTEST_HAS_INITIALIZER_LIST 1
508 # elif defined(__GNUC__)
509 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
510 # define IUTEST_HAS_INITIALIZER_LIST 1
512 # elif defined(_MSC_VER)
513 # if (_MSC_VER >= 1800)
514 # define IUTEST_HAS_INITIALIZER_LIST 1
515 # elif (_MSC_FULL_VER == 170051025)
516 # define IUTEST_HAS_INITIALIZER_LIST 1
521 #if !defined(IUTEST_HAS_INITIALIZER_LIST)
522 # define IUTEST_HAS_INITIALIZER_LIST 0
525 #if IUTEST_HAS_INITIALIZER_LIST
526 # include <initializer_list>
530 #if !defined(IUTEST_HAS_VARIADIC_TEMPLATES)
531 # if defined(__cpp_variadic_templates) && __cpp_variadic_templates >= 200704
532 # define IUTEST_HAS_VARIADIC_TEMPLATES 1
533 # elif defined(__clang__)
534 # if __has_feature(cxx_variadic_templates)
535 # define IUTEST_HAS_VARIADIC_TEMPLATES 1
537 # elif defined(__INTEL_COMPILER)
538 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER > 1200
539 # define IUTEST_HAS_VARIADIC_TEMPLATES 1
541 # elif defined(__GNUC__)
543 # if defined(__VARIADIC_TEMPLATES) \
544 || ( ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))) && defined(__GXX_EXPERIMENTAL_CXX0X__) )
545 # define IUTEST_HAS_VARIADIC_TEMPLATES 1
547 # elif defined(_MSC_VER)
548 # if (_MSC_VER >= 1800)
549 # define IUTEST_HAS_VARIADIC_TEMPLATES 1
550 # elif (_MSC_FULL_VER == 170051025)
551 # define IUTEST_HAS_VARIADIC_TEMPLATES 1
552 # define IUTEST_HAS_VARIADIC_COMBINE 0
557 #if !defined(IUTEST_HAS_VARIADIC_TEMPLATES)
558 # define IUTEST_HAS_VARIADIC_TEMPLATES 0
562 #if !defined(IUTEST_HAS_VARIADIC_TEMPLATE_TEMPLATES)
563 # if defined(__clang__)
564 # if __has_feature(cxx_variadic_templates)
565 # define IUTEST_HAS_VARIADIC_TEMPLATE_TEMPLATES 1
567 # elif defined(__INTEL_COMPILER)
568 # define IUTEST_HAS_VARIADIC_TEMPLATE_TEMPLATES IUTEST_HAS_VARIADIC_TEMPLATES
569 # elif defined(__GNUC__)
570 # if defined(__VARIADIC_TEMPLATES) || ( ((__GNUC__ > 4) \
571 || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) \
572 || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7) && (__GNUC_PATCHLEVEL__ >= 1))) \
573 && defined(__GXX_EXPERIMENTAL_CXX0X__) )
574 # define IUTEST_HAS_VARIADIC_TEMPLATE_TEMPLATES 1
576 # elif defined(_MSC_VER)
577 # define IUTEST_HAS_VARIADIC_TEMPLATE_TEMPLATES IUTEST_HAS_VARIADIC_TEMPLATES
581 #ifndef IUTEST_HAS_VARIADIC_TEMPLATE_TEMPLATES
582 # define IUTEST_HAS_VARIADIC_TEMPLATE_TEMPLATES 0
586 #if !defined(IUTEST_HAS_CHAR16_T)
587 # if defined(__cpp_unicode_characters) && __cpp_unicode_characters >= 200704 && defined(__cpp_unicode_literals) && __cpp_unicode_literals >= 200710
588 # define IUTEST_HAS_CHAR16_T 1
589 # elif defined(__clang__)
590 # if __has_feature(cxx_unicode_literals)
591 # define IUTEST_HAS_CHAR16_T 1
593 # elif defined(__INTEL_COMPILER)
594 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1400
595 # define IUTEST_HAS_CHAR16_T 1
597 # elif defined(__GNUC__)
598 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
599 # define IUTEST_HAS_CHAR16_T 1
601 # elif defined(_MSC_VER)
602 # if _MSC_VER >= 1900
603 # define IUTEST_HAS_CHAR16_T 1
608 #if !defined(IUTEST_HAS_CHAR16_T)
609 # define IUTEST_HAS_CHAR16_T 0
613 #ifndef IUTEST_HAS_CHAR32_T
614 # if defined(__cpp_unicode_characters) && __cpp_unicode_characters >= 200704 && defined(__cpp_unicode_literals) && __cpp_unicode_literals >= 200710
615 # define IUTEST_HAS_CHAR32_T 1
616 # elif defined(__clang__)
617 # if __has_feature(cxx_unicode_literals)
618 # define IUTEST_HAS_CHAR32_T 1
620 # elif defined(__INTEL_COMPILER)
621 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1400
622 # define IUTEST_HAS_CHAR32_T 1
624 # elif defined(__GNUC__)
625 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
626 # define IUTEST_HAS_CHAR32_T 1
628 # elif defined(_MSC_VER)
629 # if _MSC_VER >= 1900
630 # define IUTEST_HAS_CHAR32_T 1
635 #if !defined(IUTEST_HAS_CHAR32_T)
636 # define IUTEST_HAS_CHAR32_T 0
640 #if !defined(IUTEST_HAS_LAMBDA)
641 # if defined(__cpp_lambdas) && __cpp_lambdas >= 200907
642 # define IUTEST_HAS_LAMBDA 1
643 # elif defined(__clang__)
644 # if __has_feature(cxx_lambdas)
645 # define IUTEST_HAS_LAMBDA 1
647 # elif defined(__INTEL_COMPILER)
648 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1200
649 # define IUTEST_HAS_LAMBDA 1
651 # elif defined(__GNUC__)
652 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
653 # define IUTEST_HAS_LAMBDA 1
655 # elif defined(_MSC_VER)
657 # define IUTEST_HAS_LAMBDA 1
658 # elif _MSC_VER > 1600
659 # define IUTEST_HAS_LAMBDA 1
660 # define IUTEST_NO_LAMBDA_SEH_SCOPE_RESOLUTION
661 # elif _MSC_VER == 1600
662 # define IUTEST_HAS_LAMBDA 1
663 # define IUTEST_NO_LAMBDA_SCOPE_RESOLUTION
668 #if !defined(IUTEST_HAS_LAMBDA)
669 # define IUTEST_HAS_LAMBDA 0
672 #if IUTEST_HAS_LAMBDA
673 # if defined(__GNUC__)
674 # if (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7))
675 # define IUTEST_NO_LAMBDA_LOCAL_OBJECT_TEMPLATE_PARAMETERS
677 # elif defined(_MSC_VER)
678 # define IUTEST_NO_LAMBDA_LOCAL_OBJECT_TEMPLATE_PARAMETERS
683 #if !defined(IUTEST_HAS_EXPLICIT_CONVERSION)
684 # if defined(__clang__)
685 # if __has_feature(cxx_explicit_conversions)
686 # define IUTEST_HAS_EXPLICIT_CONVERSION 1
688 # elif defined(__INTEL_COMPILER)
689 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1300
690 # define IUTEST_HAS_EXPLICIT_CONVERSION 1
692 # elif defined(__GNUC__)
693 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
694 # define IUTEST_HAS_EXPLICIT_CONVERSION 1
696 # elif defined(_MSC_VER)
697 # if (_MSC_VER >= 1800) || (_MSC_FULL_VER == 170051025)
698 # define IUTEST_HAS_EXPLICIT_CONVERSION 1
703 #if !defined(IUTEST_HAS_EXPLICIT_CONVERSION)
704 # define IUTEST_HAS_EXPLICIT_CONVERSION 0
708 #if !defined(IUTEST_CXX_EXPLICIT_CONVERSION)
709 # if IUTEST_HAS_EXPLICIT_CONVERSION
710 # define IUTEST_CXX_EXPLICIT_CONVERSION explicit
712 # define IUTEST_CXX_EXPLICIT_CONVERSION
717 #if !defined(IUTEST_HAS_OVERRIDE_AND_FINAL)
718 # if defined(__clang__)
719 # if __has_feature(cxx_override_control)
720 # define IUTEST_HAS_OVERRIDE_AND_FINAL 1
722 # elif defined(__INTEL_COMPILER)
723 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1400
724 # define IUTEST_HAS_OVERRIDE_AND_FINAL 1
726 # elif defined(__GNUC__)
727 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
728 # define IUTEST_HAS_OVERRIDE_AND_FINAL 1
730 # elif defined(_MSC_VER)
731 # if _MSC_VER >= 1700
732 # define IUTEST_HAS_OVERRIDE_AND_FINAL 1
737 #if !defined(IUTEST_HAS_OVERRIDE_AND_FINAL)
738 # define IUTEST_HAS_OVERRIDE_AND_FINAL 0
742 #if !defined(IUTEST_CXX_OVERRIDE)
743 # if IUTEST_HAS_OVERRIDE_AND_FINAL
744 # define IUTEST_CXX_OVERRIDE override
746 # define IUTEST_CXX_OVERRIDE
751 #if !defined(IUTEST_CXX_FINAL)
752 # if IUTEST_HAS_OVERRIDE_AND_FINAL
753 # define IUTEST_CXX_FINAL final
755 # define IUTEST_CXX_FINAL
760 #ifndef IUTEST_HAS_NOEXCEPT
761 # if defined(__clang__)
762 # if __has_feature(cxx_noexcept)
763 # define IUTEST_HAS_NOEXCEPT 1
765 # elif defined(__INTEL_COMPILER)
766 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1400
767 # define IUTEST_HAS_NOEXCEPT 1
769 # elif defined(__GNUC__)
770 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
771 # define IUTEST_HAS_NOEXCEPT 1
773 # elif defined(_MSC_VER)
775 # if _MSC_FULL_VER >= 190022816
776 # define IUTEST_HAS_NOEXCEPT 1
781 #if !defined(IUTEST_HAS_NOEXCEPT)
782 # define IUTEST_HAS_NOEXCEPT 0
786 #if !defined(IUTEST_HAS_NOEXCEPT_FUNCTION_TYPE)
787 # if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510L
788 # define IUTEST_HAS_NOEXCEPT_FUNCTION_TYPE 1
792 #if !defined(IUTEST_HAS_NOEXCEPT_FUNCTION_TYPE)
793 # define IUTEST_HAS_NOEXCEPT_FUNCTION_TYPE 0
797 #if !defined(IUTEST_CXX_NOEXCEPT)
798 # if IUTEST_HAS_NOEXCEPT
799 # define IUTEST_CXX_NOEXCEPT(expr_) noexcept(expr_)
801 # define IUTEST_CXX_NOEXCEPT(expr_)
806 #if !defined(IUTEST_CXX_NOEXCEPT_SPEC)
807 # if IUTEST_HAS_NOEXCEPT
808 # define IUTEST_CXX_NOEXCEPT_SPEC noexcept
810 # define IUTEST_CXX_NOEXCEPT_SPEC
814 #if !defined(IUTEST_CXX_NOEXCEPT_AS)
815 # if IUTEST_HAS_NOEXCEPT
816 # define IUTEST_CXX_NOEXCEPT_AS(expr_) noexcept( noexcept(expr_) )
818 # define IUTEST_CXX_NOEXCEPT_AS(expr_)
823 #if !defined(IUTEST_CXX_NOTHROW)
824 # if IUTEST_HAS_NOEXCEPT
825 # define IUTEST_CXX_NOTHROW noexcept
826 # elif IUTEST_HAS_CXX2A
827 # define IUTEST_CXX_NOTHROW
829 # define IUTEST_CXX_NOTHROW throw()
834 #if !defined(IUTEST_HAS_EXTERN_TEMPLATE)
835 # if defined(_MSC_VER) && _MSC_VER >= 1400
836 # define IUTEST_HAS_EXTERN_TEMPLATE 1
837 # elif defined(__INTEL_COMPILER)
838 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER > 1100
839 # define IUTEST_HAS_EXTERN_TEMPLATE 1
841 # elif defined(__GNUC__) || defined(__clang__)
842 # define IUTEST_HAS_EXTERN_TEMPLATE 1
846 #if !defined(IUTEST_HAS_EXTERN_TEMPLATE)
847 # define IUTEST_HAS_EXTERN_TEMPLATE 0
851 #if !defined(IUTEST_HAS_STRONG_ENUMS)
852 # if defined(__clang__)
853 # if __has_feature(cxx_strong_enums)
854 # define IUTEST_HAS_STRONG_ENUMS 1
856 # elif defined(__INTEL_COMPILER)
857 # if IUTEST_HAS_CXX11 && __INTEL_COMPILER >= 1400
858 # define IUTEST_HAS_STRONG_ENUMS 1
860 # elif defined(__GNUC__)
861 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
862 # define IUTEST_HAS_STRONG_ENUMS 1
864 # elif defined(_MSC_VER)
865 # if _MSC_VER >= 1700
866 # define IUTEST_HAS_STRONG_ENUMS 1
871 #if !defined(IUTEST_HAS_STRONG_ENUMS)
872 # define IUTEST_HAS_STRONG_ENUMS 0
877 #if !defined(IUTEST_HAS_EXCEPTIONS)
878 # if defined(_MSC_VER)
879 # if defined(_CPPUNWIND) && _CPPUNWIND
880 # define IUTEST_HAS_EXCEPTIONS 1
882 # elif defined(__BORLANDC__)
883 # ifndef _HAS_EXCEPTIONS
884 # define _HAS_EXCEPTIONS 1
886 # define IUTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS
887 # elif defined(__clang__)
888 # if __EXCEPTIONS && __has_feature(cxx_exceptions)
889 # define IUTEST_HAS_EXCEPTIONS 1
891 # elif defined(__GNUC__)
892 # if defined(__EXCEPTIONS)
893 # define IUTEST_HAS_EXCEPTIONS 1
895 # elif defined(__MWERKS__)
896 # if __option(exceptions)
897 # define IUTEST_HAS_EXCEPTIONS 1
902 #if !defined(IUTEST_HAS_EXCEPTIONS)
903 # define IUTEST_HAS_EXCEPTIONS 0
907 #if !defined(IUTEST_HAS_SEH)
908 # if defined(_WIN32) && !defined(__clang__)
909 # if defined(_MSC_VER) && _MSC_VER > 1400
910 # define IUTEST_HAS_SEH IUTEST_HAS_EXCEPTIONS
912 # elif defined(__BORLANDC__)
913 # define IUTEST_HAS_SEH IUTEST_HAS_EXCEPTIONS
917 #if !defined(IUTEST_HAS_SEH)
918 # define IUTEST_HAS_SEH 0
922 #if !defined(IUTEST_HAS_RTTI)
923 # if defined(__clang__)
924 # if __has_feature(cxx_rtti)
925 # define IUTEST_HAS_RTTI 1
927 # if defined(_MSC_VER)
928 # if !defined(_CPPRTTI)
929 # include <exception>
932 # elif defined(__GNUC__)
934 # define IUTEST_HAS_RTTI 1
937 # define IUTEST_HAS_RTTI 1
939 # elif defined(__MWERKS__)
941 # define IUTEST_HAS_RTTI 1
943 # elif defined(__ARMCC_VERSION)
945 # define IUTEST_HAS_RTTI 1
947 # elif defined(__IBMCPP__)
948 # if (__IBMCPP__ >= 900)
949 # define IUTEST_HAS_RTTI 1
951 # elif defined(__INTEL_COMPILER)
952 # if defined(__INTEL_RTTI__) || defined(__cpp_rtti)
953 # define IUTEST_HAS_RTTI 1
955 # elif defined(_MSC_VER)
957 # define IUTEST_HAS_RTTI 1
962 #if !defined(IUTEST_HAS_RTTI)
963 # define IUTEST_HAS_RTTI 0
970 #if !defined(IUTEST_WCHAR_UNSIGNED)
971 # if defined(__WCHAR_UNSIGNED__) && __WCHAR_UNSIGNED__
972 # define IUTEST_WCHAR_UNSIGNED 1
973 # elif defined(_MSC_VER)
974 # if defined(_NATIVE_WCHAR_T_DEFINED)
975 # define IUTEST_WCHAR_UNSIGNED 1
980 #if !defined(IUTEST_WCHAR_UNSIGNED)
981 # define IUTEST_WCHAR_UNSIGNED 0
985 #if !defined(IUTEST_HAS_INT128)
986 # if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16
987 # define IUTEST_HAS_INT128 1
988 # elif defined(_MSC_VER) && defined(_M_X64)
995 #if !defined(IUTEST_HAS_INT128)
996 # define IUTEST_HAS_INT128 0
1000 #if !defined(IUTEST_HAS_FLOAT128)
1001 # if defined(__SIZEOF_FLOAT128__) && IUTEST_HAS_INT128
1002 # if defined(__clang__)
1003 # if IUTEST_CLANG_MAJOR > 4 && defined(__has_include)
1004 # if __has_include(<quadmath.h>)
1005 # define IUTEST_HAS_FLOAT128 1
1009 # define IUTEST_HAS_FLOAT128 1
1014 #if !defined(IUTEST_HAS_FLOAT128)
1015 # define IUTEST_HAS_FLOAT128 0
1018 #if IUTEST_HAS_FLOAT128
1019 # if defined(__FLT128_MANT_DIG__)
1020 # define IUTEST_FLT128_MANT_DIG __FLT128_MANT_DIG__
1022 # define IUTEST_FLT128_MANT_DIG 113
1027 #if !defined(IUTEST_LONG_DOUBLE_AS_IS_DOUBLE)
1028 # if defined(__SIZEOF_LONG_DOUBLE__) && defined(__SIZEOF_DOUBLE__) \
1029 && __SIZEOF_LONG_DOUBLE__ == __SIZEOF_DOUBLE__
1030 # define IUTEST_LONG_DOUBLE_AS_IS_DOUBLE 1
1034 #if !defined(IUTEST_LONG_DOUBLE_AS_IS_DOUBLE)
1035 # define IUTEST_LONG_DOUBLE_AS_IS_DOUBLE 0
1039 #if !defined(IUTEST_HAS_LONG_DOUBLE)
1040 # if defined(__SIZEOF_LONG_DOUBLE__)
1041 # if IUTEST_LONG_DOUBLE_AS_IS_DOUBLE || IUTEST_HAS_INT128
1042 # define IUTEST_HAS_LONG_DOUBLE 1
1047 #if !defined(IUTEST_HAS_LONG_DOUBLE)
1048 # define IUTEST_HAS_LONG_DOUBLE 0
1052 #if !defined(IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_MEMBER_FUNCTION)
1053 # if defined(_MSC_VER) && ((_MSC_VER < 1600) || (_MSC_VER == 1900))
1055 # define IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_MEMBER_FUNCTION 0
1057 # define IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_MEMBER_FUNCTION 1
1062 #if !defined(IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_STATIC_MEMBER_FUNCTION)
1063 # if defined(_MSC_VER) && (_MSC_VER < 1910)
1065 # define IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_STATIC_MEMBER_FUNCTION 0
1067 # define IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_STATIC_MEMBER_FUNCTION 1
1072 #if !defined(IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_OVERLOAD_MEMBER_FUNCTION)
1073 # if defined(_MSC_VER) && (_MSC_VER < 1900)
1074 # define IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_OVERLOAD_MEMBER_FUNCTION 0
1075 # elif defined(__clang__)
1077 # define IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_OVERLOAD_MEMBER_FUNCTION 0
1079 # define IUTEST_EXPLICIT_INSTANTIATION_ACCESS_PRIVATE_OVERLOAD_MEMBER_FUNCTION 1
1084 #if !defined(IUTEST_NO_VARIADIC_MACROS)
1085 # if defined(_MSC_VER) && (_MSC_VER < 1500)
1086 # define IUTEST_NO_VARIADIC_MACROS 1
1091 #if !defined(IUTEST_HAS_COUNTER_MACRO)
1092 # if defined(_MSC_VER) && (_MSC_VER >= 1300)
1093 # define IUTEST_HAS_COUNTER_MACRO 1
1094 # elif defined(__clang__)
1095 # define IUTEST_HAS_COUNTER_MACRO 1
1096 # elif defined(__GNUC__)
1097 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
1098 # define IUTEST_HAS_COUNTER_MACRO 1
1103 #if !defined(IUTEST_HAS_COUNTER_MACRO)
1104 # define IUTEST_HAS_COUNTER_MACRO 0
1108 #if !defined(IUTEST_HAS_CLASS_MEMBER_TEMPLATE_SPECIALIZATION)
1109 # if defined(_MSC_VER)
1110 # define IUTEST_HAS_CLASS_MEMBER_TEMPLATE_SPECIALIZATION 1
1112 # define IUTEST_HAS_CLASS_MEMBER_TEMPLATE_SPECIALIZATION 0
1117 #if !defined(IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
1118 # if defined(_MSC_VER) && (_MSC_VER < 1310)
1119 # define IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION 1
1124 #if !defined(IUTEST_NO_TWO_PHASE_NAME_LOOKUP)
1127 # if defined(_MSC_VER) && (_MSC_VER < 1910)
1128 # define IUTEST_NO_TWO_PHASE_NAME_LOOKUP 1
1133 #if !defined(IUTEST_NO_FUNCTION_TEMPLATE_ORDERING)
1134 # if defined(_MSC_VER) && (_MSC_VER < 1310)
1135 # define IUTEST_NO_FUNCTION_TEMPLATE_ORDERING 1
1140 #if !defined(IUTEST_NO_INCLASS_MEMBER_INITIALIZATION)
1141 # if defined(_MSC_VER) && _MSC_VER < 1310
1142 # define IUTEST_NO_INCLASS_MEMBER_INITIALIZATION 1
1147 #if !defined(IUTEST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS)
1148 # if defined(_MSC_VER) && _MSC_VER < 1310
1149 # define IUTEST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS 1
1154 #if !defined(IUTEST_NO_SFINAE)
1155 # if defined(_MSC_VER) && _MSC_VER < 1310
1156 # define IUTEST_NO_SFINAE 1
1161 #if !defined(IUTEST_NO_TEMPLATE_TEMPLATES)
1162 # if defined(_MSC_VER) && _MSC_VER < 1310
1163 # define IUTEST_NO_TEMPLATE_TEMPLATES 1
1168 #if !defined(IUTEST_NO_VOID_RETURNS)
1169 # if defined(_MSC_VER) && _MSC_VER < 1300
1170 # define IUTEST_NO_VOID_RETURNS 1
1175 #if !defined(IUTEST_NO_ARGUMENT_DEPENDENT_LOOKUP)
1176 # if defined(_MSC_VER) && _MSC_VER < 1310
1177 # define IUTEST_NO_ARGUMENT_DEPENDENT_LOOKUP 1
1181 #if !defined(IUTEST_NO_PRIVATE_IN_AGGREGATE)
1182 # if defined(_MSC_VER) && _MSC_VER < 1310
1183 # define IUTEST_NO_PRIVATE_IN_AGGREGATE 1
1188 #if !defined(IUTEST_HAS_WANT_SECURE_LIB)
1189 # if defined(_MSC_VER)
1190 # if defined(__STDC_WANT_SECURE_LIB__) && __STDC_WANT_SECURE_LIB__
1191 # define IUTEST_HAS_WANT_SECURE_LIB 1
1196 #if !defined(IUTEST_HAS_WANT_SECURE_LIB)
1197 # define IUTEST_HAS_WANT_SECURE_LIB 0
1203 #if !defined(IUTEST_HAS_MS_EXTENSIONS)
1204 # if defined(__clang__)
1208 # elif defined(_MSC_VER)
1209 # define IUTEST_HAS_MS_EXTENSIONS 1
1213 #if !defined(IUTEST_HAS_MS_EXTENSIONS)
1214 # define IUTEST_HAS_MS_EXTENSIONS 0
1218 #if !defined(IUTEST_HAS_IF_EXISTS)
1219 # if defined(__clang__)
1220 # if IUTEST_HAS_MS_EXTENSIONS && (IUTEST_CLANG_MAJOR > 3 || (IUTEST_CLANG_MAJOR == 3 && IUTEST_CLANG_MINOR >= 5) )
1221 # define IUTEST_HAS_IF_EXISTS 1
1223 # elif defined(_MSC_VER) && _MSC_VER >= 1310
1224 # define IUTEST_HAS_IF_EXISTS 1
1228 #if !defined(IUTEST_HAS_IF_EXISTS)
1229 # define IUTEST_HAS_IF_EXISTS 0
1233 #if !defined(IUTEST_HAS_ANALYSIS_ASSUME)
1234 # if defined(_MSC_VER) && (_MSC_VER >= 1500) && !defined(__CUDACC__)
1235 # define IUTEST_HAS_ANALYSIS_ASSUME 1
1236 # define IUTEST_ANALYSIS_ASSUME __analysis_assume
1245 #if !defined(IUTEST_HAS_ANALYSIS_ASSUME)
1246 # define IUTEST_HAS_ANALYSIS_ASSUME 0
1248 #if !defined(IUTEST_ANALYSIS_ASSUME)
1249 # if defined(IUTEST_NO_VARIADIC_MACROS)
1250 # define IUTEST_ANALYSIS_ASSUME(x) (void)0
1252 # define IUTEST_ANALYSIS_ASSUME(...) (void)0
1256 #if !defined(IUTEST_HAS_MS_CXX_MODULE)
1257 # if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023506
1258 # define IUTEST_HAS_MS_CXX_MODULE 1
1262 #if !defined(IUTEST_HAS_MS_CXX_MODULE)
1263 # define IUTEST_HAS_MS_CXX_MODULE 0
1266 #if IUTEST_HAS_MS_CXX_MODULE
1267 # define IUTEST_CXX_MODULE_EXPORT export
1269 # define IUTEST_CXX_MODULE_EXPORT
1275 #if !defined(IUTEST_HAS_GENERIC)
1276 # if defined(__clang__)
1277 # if __has_feature(c_generic_selections)
1278 # define IUTEST_HAS_GENERIC 1
1280 # elif defined(__GNUC__)
1287 #if !defined(IUTEST_HAS_GENERIC)
1288 # define IUTEST_HAS_GENERIC 0
1294 #if !defined(IUTEST_HAS_ATTRIBUTE)
1295 # if defined(__cpp_attributes) && __cpp_attributes >= 200809
1296 # define IUTEST_HAS_ATTRIBUTE 1
1297 # elif defined(__clang__)
1298 # if __has_feature(cxx_attributes)
1299 # define IUTEST_HAS_ATTRIBUTE 1
1301 # elif defined(__GNUC__)
1302 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
1303 # define IUTEST_HAS_ATTRIBUTE 1
1305 # elif defined(_MSC_VER)
1306 # if _MSC_VER > 1800
1307 # define IUTEST_HAS_ATTRIBUTE 1
1312 #if !defined(IUTEST_HAS_ATTRIBUTE)
1313 # define IUTEST_HAS_ATTRIBUTE 0
1317 #if !defined(IUTEST_HAS_ATTRIBUTE_LIKELY_UNLIKELY)
1318 # if defined(__has_cpp_attribute)
1319 # if __has_cpp_attribute(likely) >= 201803L && __has_cpp_attribute(unlikely) >= 201803L
1320 # if defined(__GNUC__) && (__GNUC__ <= 9)
1322 # define IUTEST_HAS_ATTRIBUTE_LIKELY_UNLIKELY 0
1324 # define IUTEST_HAS_ATTRIBUTE_LIKELY_UNLIKELY IUTEST_HAS_ATTRIBUTE
1330 #if !defined(IUTEST_HAS_ATTRIBUTE_LIKELY_UNLIKELY)
1331 # define IUTEST_HAS_ATTRIBUTE_LIKELY_UNLIKELY 0
1335 #if !defined(IUTEST_ATTRIBUTE_LIKELY_)
1336 # if IUTEST_HAS_ATTRIBUTE_LIKELY_UNLIKELY
1337 # define IUTEST_ATTRIBUTE_LIKELY_ [[likely]]
1342 #if !defined(IUTEST_ATTRIBUTE_LIKELY_)
1343 # define IUTEST_ATTRIBUTE_LIKELY_
1347 #if !defined(IUTEST_ATTRIBUTE_UNLIKELY_)
1348 # if IUTEST_HAS_ATTRIBUTE_LIKELY_UNLIKELY
1349 # define IUTEST_ATTRIBUTE_UNLIKELY_ [[unlikely]]
1354 #if !defined(IUTEST_ATTRIBUTE_UNLIKELY_)
1355 # define IUTEST_ATTRIBUTE_UNLIKELY_
1359 #if !defined(IUTEST_HAS_ATTRIBUTE_DEPRECATED)
1360 # if defined(__has_cpp_attribute)
1361 # if __has_cpp_attribute(deprecated) >= 201309
1362 # define IUTEST_HAS_ATTRIBUTE_DEPRECATED IUTEST_HAS_ATTRIBUTE
1364 # elif defined(__GNUC__)
1365 # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)) && defined(__GXX_EXPERIMENTAL_CXX0X__)
1366 # define IUTEST_HAS_ATTRIBUTE_DEPRECATED 1
1368 # elif defined(__clang__)
1369 # if IUTEST_CLANG_MAJOR > 3 || (IUTEST_CLANG_MAJOR == 3 && IUTEST_CLANG_MINOR >= 4)
1370 # define IUTEST_HAS_ATTRIBUTE_DEPRECATED 1
1372 # elif defined(_MSC_VER)
1373 # define IUTEST_HAS_ATTRIBUTE_DEPRECATED IUTEST_HAS_ATTRIBUTE
1377 #if !defined(IUTEST_HAS_ATTRIBUTE_DEPRECATED)
1378 # define IUTEST_HAS_ATTRIBUTE_DEPRECATED 0
1382 #if !defined(IUTEST_ATTRIBUTE_DEPRECATED_)
1383 # if IUTEST_HAS_ATTRIBUTE_DEPRECATED
1384 # define IUTEST_ATTRIBUTE_DEPRECATED_ [[deprecated]]
1388 #if !defined(IUTEST_ATTRIBUTE_DEPRECATED_)
1389 # define IUTEST_ATTRIBUTE_DEPRECATED_
1393 #if !defined(IUTEST_ATTRIBUTE_UNUSED_)
1394 # if (defined(__GNUC__) && !defined(COMPILER_ICC))
1395 # define IUTEST_ATTRIBUTE_UNUSED_ __attribute__((unused))
1396 # elif defined(__clang__)
1397 # if __has_attribute(unused)
1398 # define IUTEST_ATTRIBUTE_UNUSED_ __attribute__((unused))
1403 #if !defined(IUTEST_ATTRIBUTE_UNUSED_)
1404 # define IUTEST_ATTRIBUTE_UNUSED_
1408 #if !defined(IUTEST_ATTRIBUTE_PURE_)
1409 # if defined(__GNUC__) && !defined(COMPILER_ICC)
1410 # define IUTEST_ATTRIBUTE_PURE_ __attribute__((pure))
1412 # define IUTEST_ATTRIBUTE_PURE_
1417 #if !defined(IUTEST_ATTRIBUTE_NORETURN_)
1418 # if IUTEST_HAS_ATTRIBUTE
1419 # define IUTEST_ATTRIBUTE_NORETURN_ [[noreturn]]
1420 # elif defined(__clang__)
1421 # if __has_attribute(noreturn)
1422 # define IUTEST_ATTRIBUTE_NORETURN_ __attribute__((noreturn))
1424 # elif defined(__GNUC__) && !defined(COMPILER_ICC)
1425 # define IUTEST_ATTRIBUTE_NORETURN_ __attribute__((noreturn))
1426 # elif defined(_MSC_VER)
1427 # define IUTEST_ATTRIBUTE_NORETURN_ __declspec(noreturn)
1431 #if !defined(IUTEST_ATTRIBUTE_NORETURN_)
1432 # define IUTEST_ATTRIBUTE_NORETURN_
1436 #if !defined(IUTEST_ATTRIBUTE_INIT_PRIORITY_)
1437 # if defined(__clang__)
1438 # if __has_attribute(init_priority)
1439 # define IUTEST_ATTRIBUTE_INIT_PRIORITY_(n) __attribute__((init_priority(n)))
1441 # elif defined(__GNUC__) && !defined(COMPILER_ICC)
1442 # define IUTEST_ATTRIBUTE_INIT_PRIORITY_(n) __attribute__((init_priority(n)))
1446 #if !defined(IUTEST_ATTRIBUTE_INIT_PRIORITY_)
1447 # define IUTEST_ATTRIBUTE_INIT_PRIORITY_(n)
1451 #if !defined(IUTEST_ATTRIBUTE_FORMAT)
1452 # if defined(__has_attribute)
1453 # if __has_attribute(format)
1454 # define IUTEST_ATTRIBUTE_FORMAT(fmt, fi, vi) __attribute__ ((__format__ (fmt, fi, vi)))
1456 # elif defined(__GNUC__) && !defined(COMPILER_ICC)
1457 # define IUTEST_ATTRIBUTE_FORMAT(fmt, fi, vi) __attribute__ ((__format__ (fmt, fi, vi)))
1462 #if !defined(IUTEST_ATTRIBUTE_FORMAT_PRINTF) && defined(IUTEST_ATTRIBUTE_FORMAT)
1463 # if defined(__MINGW__) || defined(__MINGW32__) || defined(__MINGW64__)
1464 # if !defined(__MINGW_PRINTF_FORMAT)
1465 # define __MINGW_PRINTF_FORMAT gnu_printf
1467 # define IUTEST_ATTRIBUTE_FORMAT_PRINTF(fi, vi) IUTEST_ATTRIBUTE_FORMAT(__MINGW_PRINTF_FORMAT, fi, vi)
1469 # define IUTEST_ATTRIBUTE_FORMAT_PRINTF(fi, vi) IUTEST_ATTRIBUTE_FORMAT(__printf__, fi, vi)
1473 #if !defined(IUTEST_ATTRIBUTE_FORMAT)
1474 # define IUTEST_ATTRIBUTE_FORMAT(fmt, fi, vi)
1476 #if !defined(IUTEST_ATTRIBUTE_FORMAT_PRINTF)
1477 # define IUTEST_ATTRIBUTE_FORMAT_PRINTF(fi, vi)
1484 #if !defined(IUTEST_HAS_BUILTIN_EXPECT)
1485 # if defined(__clang__) || defined(__GNUC__)
1486 # define IUTEST_HAS_BUILTIN_EXPECT 1
1490 #if !defined(IUTEST_HAS_BUILTIN_EXPECT)
1491 # define IUTEST_HAS_BUILTIN_EXPECT 0
1494 #if !defined(IUTEST_COND_LIKELY)
1495 # if IUTEST_HAS_ATTRIBUTE_LIKELY_UNLIKELY
1496 # define IUTEST_COND_LIKELY(cond) (cond) IUTEST_ATTRIBUTE_LIKELY_
1497 # elif IUTEST_HAS_BUILTIN_EXPECT
1498 # define IUTEST_COND_LIKELY(cond) (__builtin_expect(static_cast<bool>(!!(cond)), 1))
1500 # define IUTEST_COND_LIKELY(cond) (cond)
1504 #if !defined(IUTEST_COND_UNLIKELY)
1505 # if IUTEST_HAS_ATTRIBUTE_LIKELY_UNLIKELY
1506 # define IUTEST_COND_UNLIKELY(cond) (cond) IUTEST_ATTRIBUTE_UNLIKELY_
1507 # elif IUTEST_HAS_BUILTIN_EXPECT
1508 # define IUTEST_COND_UNLIKELY(cond) (__builtin_expect(static_cast<bool>(!!(cond)), 0))
1510 # define IUTEST_COND_UNLIKELY(cond) (cond)
1515 #if !defined(IUTEST_HAS_MEMORY_SANITIZER)
1516 # if defined(__has_feature)
1517 # if __has_feature(memory_sanitizer)
1518 # define IUTEST_HAS_MEMORY_SANITIZER 1
1523 #if !defined(IUTEST_HAS_MEMORY_SANITIZER)
1524 # define IUTEST_HAS_MEMORY_SANITIZER 0
1527 #if !defined(IUTEST_ATTRIBUTE_NO_SANITIZE_MEMORY)
1528 # if IUTEST_HAS_MEMORY_SANITIZER
1529 # if defined(__clang__)
1530 # define IUTEST_ATTRIBUTE_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory))
1531 # elif defined(__GNUC__) && !defined(COMPILER_ICC)
1532 # define IUTEST_ATTRIBUTE_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory))
1537 #if !defined(IUTEST_ATTRIBUTE_NO_SANITIZE_MEMORY)
1538 # define IUTEST_ATTRIBUTE_NO_SANITIZE_MEMORY
1542 #if !defined(IUTEST_HAS_ADDRESS_SANITIZER)
1543 # if defined(__has_feature)
1544 # if __has_feature(address_sanitizer)
1545 # define IUTEST_HAS_ADDRESS_SANITIZER 1
1550 #if !defined(IUTEST_HAS_ADDRESS_SANITIZER)
1551 # define IUTEST_HAS_ADDRESS_SANITIZER 0
1554 #if !defined(IUTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS)
1555 # if IUTEST_HAS_ADDRESS_SANITIZER
1556 # if defined(__clang__)
1557 # define IUTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address))
1558 # elif defined(__GNUC__) && !defined(COMPILER_ICC)
1559 # define IUTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address))
1564 #if !defined(IUTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS)
1565 # define IUTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS
1569 #if !defined(IUTEST_HAS_THREAD_SANITIZER)
1570 # if defined(__has_feature)
1571 # if __has_feature(thread_sanitizer)
1572 # define IUTEST_HAS_THREAD_SANITIZER 1
1577 #if !defined(IUTEST_HAS_THREAD_SANITIZER)
1578 # define IUTEST_HAS_THREAD_SANITIZER 0
1581 #if !defined(IUTEST_ATTRIBUTE_NO_SANITIZE_THREAD)
1582 # if IUTEST_HAS_THREAD_SANITIZER
1583 # if defined(__clang__)
1584 # define IUTEST_ATTRIBUTE_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread))
1585 # elif defined(__GNUC__) && !defined(COMPILER_ICC)
1586 # define IUTEST_ATTRIBUTE_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread))
1591 #if !defined(IUTEST_ATTRIBUTE_NO_SANITIZE_THREAD)
1592 # define IUTEST_ATTRIBUTE_NO_SANITIZE_THREAD
1595 #if !defined(IUTEST_ATTRIBUTE_NO_SANITIZE_ALL)
1596 # define IUTEST_ATTRIBUTE_NO_SANITIZE_ALL \
1597 IUTEST_ATTRIBUTE_NO_SANITIZE_MEMORY \
1598 IUTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS \
1599 IUTEST_ATTRIBUTE_NO_SANITIZE_THREAD
1602 #if !defined(IUTEST_ATTRIBUTE_NO_SANITIZE_ALL)
1603 # define IUTEST_ATTRIBUTE_NO_SANITIZE_ALL
1612 #if defined(_MSC_VER)
1614 # define IUTEST_WORKAROUND_MSC_STLSTREAM_C4250() \
1615 void _Add_vtordisp1() {} \
1616 void _Add_vtordisp2() {}
1618 # define IUTEST_WORKAROUND_MSC_STLSTREAM_C4250()
1628 #if defined(_MSC_VER) && _MSC_VER < 1300
1629 # pragma warning(disable:4786)