6#pragma qt_class(QtCompilerDetection)
7#pragma qt_sync_skip_header_check
8#pragma qt_sync_stop_processing
11#ifndef QCOMPILERDETECTION_H
12#define QCOMPILERDETECTION_H
14#include <QtCore/qprocessordetection.h>
15#include <QtCore/qsystemdetection.h>
16#include <QtCore/qtconfiginclude.h>
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
48#if defined(__COVERITY__)
50# define Q_COMPILER_COMPLAINS_ABOUT_RETURN_AFTER_UNREACHABLE
54#if defined(__DMC__) || defined(__SC__)
57# if defined(__SC__) && __SC__ < 0x750
58# error "Compiler not supported"
61#elif defined(_MSC_VER)
62# define Q_CC_MSVC (_MSC_VER)
64# define Q_CC_MSVC_ONLY Q_CC_MSVC
67# define Q_CC_CLANG ((__clang_major__ * 100
) + __clang_minor__)
68# define Q_CC_CLANG_ONLY Q_CC_CLANG
70# define Q_OUTOFLINE_TEMPLATE inline
71# define Q_COMPILER_MANGLES_RETURN_TYPE
72# define Q_COMPILER_MANGLES_ACCESS_SPECIFIER
73# define Q_FUNC_INFO __FUNCSIG__
74# define Q_ASSUME_IMPL(expr) __assume(expr)
75# define Q_UNREACHABLE_IMPL() __assume(0
)
76# define Q_DECL_EXPORT __declspec(dllexport)
77# define Q_DECL_IMPORT __declspec(dllimport)
79# define QT_MAKE_CHECKED_ARRAY_ITERATOR(x, N) stdext::make_checked_array_iterator(x, size_t(N))
81# define Q_COMPILER_COMPLAINS_ABOUT_RETURN_AFTER_UNREACHABLE
83#elif defined(__BORLANDC__) || defined(__TURBOC__)
85# define Q_INLINE_TEMPLATE
86# if __BORLANDC__ < 0x502
87# error "Compiler not supported"
90#elif defined(__WATCOMC__)
94
95
96#elif defined(__ARMCC__) || defined(__CC_ARM)
99# define __is_empty(X) false
100# define __is_pod(X) false
101# define Q_DECL_DEPRECATED __attribute__ ((__deprecated__))
103# define Q_DECL_EXPORT __attribute__((visibility("default")))
104# define Q_DECL_IMPORT __attribute__((visibility("default")))
105# define Q_DECL_HIDDEN __attribute__((visibility("hidden")))
107# define Q_DECL_EXPORT __declspec(dllexport)
108# define Q_DECL_IMPORT __declspec(dllimport)
111#elif defined(__GNUC__
)
112# define Q_CC_GNU (__GNUC__
* 100
+ __GNUC_MINOR__
)
113# if defined(__MINGW32__)
116# if defined(__clang__
)
118# if defined(__apple_build_version__)
125# if __apple_build_version__ >= 14030022
126# define Q_CC_CLANG 1500
127# elif __apple_build_version__ >= 14000029
128# define Q_CC_CLANG 1400
129# elif __apple_build_version__ >= 13160021
130# define Q_CC_CLANG 1300
131# elif __apple_build_version__ >= 13000029
132# define Q_CC_CLANG 1200
133# elif __apple_build_version__ >= 12050022
134# define Q_CC_CLANG 1110
135# elif __apple_build_version__ >= 12000032
136# define Q_CC_CLANG 1000
137# elif __apple_build_version__ >= 11030032
138# define Q_CC_CLANG 900
139# elif __apple_build_version__ >= 11000033
140# define Q_CC_CLANG 800
142# error "Unsupported Apple Clang version"
146# define Q_CC_CLANG ((__clang_major__
* 100
) + __clang_minor__
)
148# define Q_CC_CLANG_ONLY Q_CC_CLANG
150# define Q_ASSUME_IMPL(expr) __builtin_assume(expr)
152# define Q_ASSUME_IMPL(expr) if (expr){} else __builtin_unreachable()
154# define Q_UNREACHABLE_IMPL() __builtin_unreachable()
157# define __has_extension __has_feature
159# if defined(__APPLE__)
161# define Q_DECL_CF_RETURNS_RETAINED __attribute__((cf_returns_retained))
163# define Q_DECL_NS_RETURNS_AUTORELEASED __attribute__((ns_returns_autoreleased))
166# ifdef __EMSCRIPTEN__
167# define Q_CC_EMSCRIPTEN
171# define Q_CC_GNU_ONLY Q_CC_GNU
173# define Q_ASSUME_IMPL(expr) if (expr){} else __builtin_unreachable()
174# define Q_UNREACHABLE_IMPL() __builtin_unreachable()
175# define Q_DECL_DEPRECATED_X(text) __attribute__ ((__deprecated__(text)))
180# define Q_DECL_EXPORT __declspec(dllexport)
181# define Q_DECL_IMPORT __declspec(dllimport)
183# define Q_DECL_EXPORT_OVERRIDABLE __attribute__((visibility("default"), weak))
184# ifdef QT_USE_PROTECTED_VISIBILITY
185# define Q_DECL_EXPORT __attribute__((visibility("protected")))
187# define Q_DECL_EXPORT __attribute__((visibility("default")))
189# define Q_DECL_IMPORT __attribute__((visibility("default")))
190# define Q_DECL_HIDDEN __attribute__((visibility("hidden")))
193# define Q_FUNC_INFO __PRETTY_FUNCTION__
194# define Q_TYPEOF(expr) __typeof__(expr)
195# define Q_DECL_DEPRECATED __attribute__ ((__deprecated__))
196# define Q_DECL_UNUSED __attribute__((__unused__))
197# define Q_LIKELY(expr) __builtin_expect(!!(expr), true)
198# define Q_UNLIKELY(expr) __builtin_expect(!!(expr), false)
199# define Q_NORETURN __attribute__((__noreturn__))
200# define Q_REQUIRED_RESULT __attribute__ ((__warn_unused_result__))
201# define Q_DECL_PURE_FUNCTION __attribute__((pure))
202# define Q_DECL_CONST_FUNCTION __attribute__((const))
203# define Q_DECL_COLD_FUNCTION __attribute__((cold))
204# if !defined(QT_MOC_CPP)
205# define Q_PACKED __attribute__ ((__packed__))
207# define QT_NO_ARM_EABI
210# if Q_CC_GNU
>= 403
&& !defined(Q_CC_CLANG
)
211# define Q_ALLOC_SIZE(x) __attribute__((alloc_size(x)))
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236#elif defined(__xlC__)
239# error "Compiler not supported"
240# elif __xlC__ >= 0x0600
241# define Q_TYPEOF(expr) __typeof__(expr)
242# define Q_PACKED __attribute__((__packed__))
246
247
248
249
250#elif defined(__DECCXX) || defined(__DECC)
253
258
259
260# if !defined(_BOOL_EXISTS)
261# error "Compiler not supported"
265
266# if __DECCXX_VER < 60060000
267# define Q_BROKEN_TEMPLATE_SPECIALIZATION
270# define Q_OUTOFLINE_TEMPLATE inline
273
281
282
283
284#elif !defined(Q_OS_HPUX) && (defined(__EDG) || defined(__EDG__))
287
288
289
290
291
292
293# if !defined(_BOOL) && !defined(__BOOL_DEFINED) && !defined(__ghs)
294# error "Compiler not supported"
298# if defined(__COMO__)
302
303
304
311# define Q_DECL_DEPRECATED __attribute__ ((__deprecated__))
312# define Q_PACKED __attribute__ ((__packed__))
313# define Q_FUNC_INFO __PRETTY_FUNCTION__
314# define Q_TYPEOF(expr) __typeof__(expr)
315# define Q_UNREACHABLE_IMPL()
316# if defined(__cplusplus)
317# define Q_COMPILER_AUTO_TYPE
318# define Q_COMPILER_STATIC_ASSERT
319# define Q_COMPILER_RANGE_FOR
320# if __GHS_VERSION_NUMBER >= 201505
321# define Q_COMPILER_ALIGNAS
322# define Q_COMPILER_ALIGNOF
323# define Q_COMPILER_ATOMICS
324# define Q_COMPILER_ATTRIBUTES
325# define Q_COMPILER_AUTO_FUNCTION
326# define Q_COMPILER_CLASS_ENUM
327# define Q_COMPILER_DECLTYPE
328# define Q_COMPILER_DEFAULT_MEMBERS
329# define Q_COMPILER_DELETE_MEMBERS
330# define Q_COMPILER_DELEGATING_CONSTRUCTORS
331# define Q_COMPILER_EXPLICIT_CONVERSIONS
332# define Q_COMPILER_EXPLICIT_OVERRIDES
333# define Q_COMPILER_EXTERN_TEMPLATES
334# define Q_COMPILER_INHERITING_CONSTRUCTORS
335# define Q_COMPILER_INITIALIZER_LISTS
336# define Q_COMPILER_LAMBDA
337# define Q_COMPILER_NONSTATIC_MEMBER_INIT
338# define Q_COMPILER_NOEXCEPT
339# define Q_COMPILER_NULLPTR
340# define Q_COMPILER_RANGE_FOR
341# define Q_COMPILER_RAW_STRINGS
342# define Q_COMPILER_REF_QUALIFIERS
343# define Q_COMPILER_RVALUE_REFS
344# define Q_COMPILER_STATIC_ASSERT
345# define Q_COMPILER_TEMPLATE_ALIAS
346# define Q_COMPILER_THREAD_LOCAL
347# define Q_COMPILER_UDL
348# define Q_COMPILER_UNICODE_STRINGS
349# define Q_COMPILER_UNIFORM_INIT
350# define Q_COMPILER_UNRESTRICTED_UNIONS
351# define Q_COMPILER_VARIADIC_MACROS
352# define Q_COMPILER_VARIADIC_TEMPLATES
356# elif defined(__DCC__)
359# error "Compiler not supported"
363# elif defined(__USLC__) && defined(__SCO_VERSION__)
366# if !defined(__SCO_VERSION__) || (__SCO_VERSION__ < 302200010
)
367# define Q_OUTOFLINE_TEMPLATE inline
371# elif defined(CENTERLINE_CLPP) || defined(OBJECTCENTER)
375
381
382#elif defined(_DIAB_TOOL)
384# define Q_FUNC_INFO __PRETTY_FUNCTION__
387#elif defined(__HIGHC__)
390#elif defined(__SUNPRO_CC) || defined(__SUNPRO_C)
392# define Q_COMPILER_MANGLES_RETURN_TYPE
394
395
396
397# if __SUNPRO_CC >= 0x500
398# define QT_NO_TEMPLATE_TEMPLATE_PARAMETERS
400# if __SUNPRO_CC >= 0x590
401# define Q_TYPEOF(expr) __typeof__(expr)
403# if __SUNPRO_CC >= 0x550
404# define Q_DECL_EXPORT __global
407# error "Compiler not supported"
411# error "Compiler not supported"
415
420# error "Compiler not supported"
422# define Q_BROKEN_TEMPLATE_SPECIALIZATION
425# error "Qt has not been tested with this compiler - see http://www.qt-project.org/"
429
430
431
432
433
435# define __has_builtin(x) 0
438# define __has_feature(x) 0
441# define __has_attribute(x) 0
444# define __has_cpp_attribute(x) 0
447# define __has_include(x) 0
450# define __has_include_next(x) 0
454
455
456
457
458
459#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
460# define QT_ASAN_ENABLED
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
527
528
529#define Q_COMPILER_THREADSAFE_STATICS
531#if defined(Q_CC_CLANG
)
533# define Q_COMPILER_RESTRICTED_VLA
535# define Q_DECL_DEPRECATED_X(text) __attribute__ ((__deprecated__(text)))
541# define Q_COMPILER_BINARY_LITERALS
545# if Q_CC_CLANG
>= 209
546# if !defined(__STRICT_ANSI__) || defined(__GXX_EXPERIMENTAL_CXX0X__
)
547 || (defined(__cplusplus
) && (__cplusplus
>= 201103L
))
548 || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L
))
549# define Q_COMPILER_VARIADIC_MACROS
554# if (defined(__cplusplus
) && __cplusplus
>= 201103L
)
555 || defined(__GXX_EXPERIMENTAL_CXX0X__
)
558# define Q_COMPILER_ALIGNAS
559# define Q_COMPILER_ALIGNOF
562# define Q_COMPILER_ATOMICS
565# define Q_COMPILER_ATTRIBUTES
568# define Q_COMPILER_AUTO_FUNCTION
569# define Q_COMPILER_AUTO_TYPE
572# define Q_COMPILER_CLASS_ENUM
575# define Q_COMPILER_CONSTEXPR
578# define Q_COMPILER_DECLTYPE
581# define Q_COMPILER_DEFAULT_MEMBERS
584# define Q_COMPILER_DELETE_MEMBERS
587# define Q_COMPILER_DELEGATING_CONSTRUCTORS
590# define Q_COMPILER_EXPLICIT_CONVERSIONS
593# define Q_COMPILER_EXPLICIT_OVERRIDES
596# define Q_COMPILER_INHERITING_CONSTRUCTORS
599# define Q_COMPILER_INITIALIZER_LISTS
600# define Q_COMPILER_UNIFORM_INIT
603# define Q_COMPILER_LAMBDA
606# define Q_COMPILER_NOEXCEPT
609# define Q_COMPILER_NONSTATIC_MEMBER_INIT
612# define Q_COMPILER_NULLPTR
615# define Q_COMPILER_RANGE_FOR
618# define Q_COMPILER_RAW_STRINGS
621# define Q_COMPILER_REF_QUALIFIERS
624# define Q_COMPILER_RVALUE_REFS
627# define Q_COMPILER_STATIC_ASSERT
630# define Q_COMPILER_TEMPLATE_ALIAS
633# if !defined(__FreeBSD__)
634# define Q_COMPILER_THREAD_LOCAL
638# define Q_COMPILER_UDL
641# define Q_COMPILER_UNICODE_STRINGS
644# define Q_COMPILER_UNRESTRICTED_UNIONS
647# define Q_COMPILER_VARIADIC_TEMPLATES
650# if Q_CC_CLANG
>= 209
651# define Q_COMPILER_EXTERN_TEMPLATES
656# if defined(__cplusplus
) && __cplusplus
> 201103L
661# define Q_COMPILER_GENERIC_LAMBDA
664# define Q_COMPILER_LAMBDA_CAPTURES
667# define Q_COMPILER_RELAXED_CONSTEXPR_FUNCTIONS
670# define Q_COMPILER_RETURN_TYPE_DEDUCTION
673# define Q_COMPILER_VARIABLE_TEMPLATES
676# define Q_COMPILER_VLA
680# if defined(__STDC_VERSION__)
681# if __has_feature(c_static_assert)
682# define Q_COMPILER_STATIC_ASSERT
684# if __has_feature(c_thread_local) && __has_include(<threads.h>)
685# if !defined(__FreeBSD__)
686# define Q_COMPILER_THREAD_LOCAL
692# define Q_DECL_UNUSED __attribute__((__unused__))
697#if defined(Q_CC_GNU_ONLY)
698# define Q_COMPILER_RESTRICTED_VLA
701# define Q_COMPILER_BINARY_LITERALS
703# if !defined(__STRICT_ANSI__) || defined(__GXX_EXPERIMENTAL_CXX0X__)
704 || (defined(__cplusplus) && (__cplusplus >= 201103L
))
705 || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L
))
707# define Q_COMPILER_VARIADIC_MACROS
709# if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
712# define Q_COMPILER_DECLTYPE
713# define Q_COMPILER_RVALUE_REFS
714# define Q_COMPILER_STATIC_ASSERT
718# define Q_COMPILER_AUTO_FUNCTION
719# define Q_COMPILER_AUTO_TYPE
720# define Q_COMPILER_EXTERN_TEMPLATES
721# define Q_COMPILER_UNIFORM_INIT
722# define Q_COMPILER_UNICODE_STRINGS
723# define Q_COMPILER_VARIADIC_TEMPLATES
727# define Q_COMPILER_EXPLICIT_CONVERSIONS
729
730# define Q_COMPILER_INITIALIZER_LISTS
731# define Q_COMPILER_LAMBDA
732# define Q_COMPILER_RAW_STRINGS
733# define Q_COMPILER_CLASS_ENUM
737
738
739# define Q_COMPILER_DEFAULT_MEMBERS
740# define Q_COMPILER_DELETE_MEMBERS
742# define Q_COMPILER_NULLPTR
743# define Q_COMPILER_UNRESTRICTED_UNIONS
744# define Q_COMPILER_RANGE_FOR
748
749
750
751# define Q_COMPILER_ATOMICS
753
754# define Q_COMPILER_NOEXCEPT
756# define Q_COMPILER_NONSTATIC_MEMBER_INIT
757# define Q_COMPILER_DELEGATING_CONSTRUCTORS
758# define Q_COMPILER_EXPLICIT_OVERRIDES
759# define Q_COMPILER_TEMPLATE_ALIAS
760# define Q_COMPILER_UDL
763# define Q_COMPILER_ATTRIBUTES
764# define Q_COMPILER_ALIGNAS
765# define Q_COMPILER_ALIGNOF
766# define Q_COMPILER_INHERITING_CONSTRUCTORS
767# define Q_COMPILER_THREAD_LOCAL
768# if Q_CC_GNU > 408
|| __GNUC_PATCHLEVEL__ >= 1
769# define Q_COMPILER_REF_QUALIFIERS
774
775# define Q_COMPILER_CONSTEXPR
778# if __cplusplus > 201103L
782# define Q_COMPILER_LAMBDA_CAPTURES
783# define Q_COMPILER_RETURN_TYPE_DEDUCTION
786# if defined(__STDC_VERSION__) && __STDC_VERSION__ > 199901L
789# define Q_COMPILER_STATIC_ASSERT
791# if Q_CC_GNU >= 409
&& defined(__has_include)
793# if __has_include(<threads.h>)
794# define Q_COMPILER_THREAD_LOCAL
800#if defined(Q_CC_MSVC) && !defined(Q_CC_CLANG
)
801# if defined(__cplusplus)
803# define Q_COMPILER_VARIADIC_MACROS
806
807
808
809
810
811
812
813
815# define Q_COMPILER_AUTO_FUNCTION
816# define Q_COMPILER_AUTO_TYPE
817# define Q_COMPILER_DECLTYPE
818# define Q_COMPILER_EXTERN_TEMPLATES
819# define Q_COMPILER_LAMBDA
820# define Q_COMPILER_NULLPTR
821# define Q_COMPILER_RVALUE_REFS
822# define Q_COMPILER_STATIC_ASSERT
824# define Q_COMPILER_EXPLICIT_OVERRIDES
825# define Q_COMPILER_CLASS_ENUM
826# define Q_COMPILER_ATOMICS
828# define Q_COMPILER_DELETE_MEMBERS
829# define Q_COMPILER_DELEGATING_CONSTRUCTORS
830# define Q_COMPILER_EXPLICIT_CONVERSIONS
831# define Q_COMPILER_NONSTATIC_MEMBER_INIT
832# define Q_COMPILER_RAW_STRINGS
833# define Q_COMPILER_TEMPLATE_ALIAS
834# define Q_COMPILER_VARIADIC_TEMPLATES
835# define Q_COMPILER_INITIALIZER_LISTS
837# define Q_COMPILER_DEFAULT_MEMBERS
838# define Q_COMPILER_ALIGNAS
839# define Q_COMPILER_ALIGNOF
840# define Q_COMPILER_INHERITING_CONSTRUCTORS
841# define Q_COMPILER_NOEXCEPT
842# define Q_COMPILER_RANGE_FOR
843# define Q_COMPILER_REF_QUALIFIERS
844# define Q_COMPILER_THREAD_LOCAL
845# define Q_COMPILER_UDL
846# define Q_COMPILER_UNICODE_STRINGS
847# define Q_COMPILER_UNRESTRICTED_UNIONS
848# if _MSC_FULL_VER >= 190023419
849# define Q_COMPILER_ATTRIBUTES
852# define Q_COMPILER_UNIFORM_INIT
855# define Q_COMPILER_CONSTEXPR
862# define Q_COMPILER_LACKS_THREE_WAY_COMPARE_SYMMETRY
865# define Q_COMPILER_SLOW_QSTRNLEN_COMPILATION
869#ifdef Q_COMPILER_UNICODE_STRINGS
870# define Q_STDLIB_UNICODE_STRINGS
871#elif defined(__cplusplus)
872# error "Qt6 requires Unicode string support in both the compiler and the standard library"
877# if defined(Q_OS_QNX)
886# if !defined(__GLIBCXX__) && !defined(_LIBCPP_VERSION)
892# if !defined(_HAS_CPP0X) || !_HAS_CPP0X
894# undef Q_COMPILER_INITIALIZER_LISTS
895# undef Q_COMPILER_RVALUE_REFS
896# undef Q_COMPILER_REF_QUALIFIERS
897# undef Q_COMPILER_NOEXCEPT
899# undef Q_STDLIB_UNICODE_STRINGS
901# if !defined(_HAS_NULLPTR_T) || !_HAS_NULLPTR_T
902# undef Q_COMPILER_NULLPTR
904# if !defined(_HAS_CONSTEXPR) || !_HAS_CONSTEXPR
907# undef Q_COMPILER_CONSTEXPR
911# if defined(Q_CC_CLANG
) && defined(Q_OS_DARWIN)
912# if defined(__GNUC_LIBSTD__) && ((__GNUC_LIBSTD__-0
) * 100
+ __GNUC_LIBSTD_MINOR__-0
<= 402
)
915# undef Q_COMPILER_INITIALIZER_LISTS
916# undef Q_COMPILER_RVALUE_REFS
917# undef Q_COMPILER_REF_QUALIFIERS
919# undef Q_COMPILER_ATOMICS
921# if defined(__cpp_lib_memory_resource)
922 && ((defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 140000
)
923 || (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 170000
))
924# undef __cpp_lib_memory_resource
930#if defined(Q_COMPILER_DEFAULT_MEMBERS
) && defined(Q_COMPILER_DELETE_MEMBERS
)
931# define Q_COMPILER_DEFAULT_DELETE_MEMBERS
935
936
937
938#define Q_ALIGNOF(x) alignof(x)
939#define Q_DECL_ALIGN(n) alignas(n)
942# define Q_CONSTEXPR constexpr
943# define Q_DECL_CONSTEXPR constexpr
944# define Q_DECL_EQ_DEFAULT = default
945# define Q_DECL_EQ_DELETE = delete
946# define Q_DECL_FINAL final
947# define Q_DECL_NOEXCEPT noexcept
948# define Q_DECL_NOEXCEPT_EXPR(x) noexcept(x)
949# define Q_DECL_OVERRIDE override
950# define Q_DECL_RELAXED_CONSTEXPR constexpr
951# define Q_NULLPTR nullptr
952# define Q_RELAXED_CONSTEXPR constexpr
954# define Q_CONSTEXPR const
955# define Q_DECL_CONSTEXPR
956# define Q_DECL_RELAXED_CONSTEXPR
957# define Q_NULLPTR NULL
958# define Q_RELAXED_CONSTEXPR const
960# define Q_DECL_NOEXCEPT __attribute__((__nothrow__))
962# define Q_DECL_NOEXCEPT
968# undef Q_REQUIRED_RESULT
969# define Q_REQUIRED_RESULT [[nodiscard]]
974# ifndef Q_NODISCARD_CTOR
975# define Q_NODISCARD_CTOR [[nodiscard]]
978# ifndef Q_NODISCARD_X
979# define Q_NODISCARD_X(message) [[nodiscard(message)]]
981# ifndef Q_NODISCARD_CTOR_X
982# define Q_NODISCARD_CTOR_X(message) [[nodiscard(message)]]
988# define Q_DECL_UNUSED [[maybe_unused]]
993# define Q_NORETURN [[noreturn]]
998# undef Q_DECL_DEPRECATED
1001# undef Q_DECL_DEPRECATED_X
1003# define Q_DECL_DEPRECATED [[deprecated]]
1004# define Q_DECL_DEPRECATED_X(x) [[deprecated(x)]]
1010#ifndef Q_DECL_CONSTEXPR_DTOR
1011# if __cpp_constexpr
>= 201907L
1012# define Q_DECL_CONSTEXPR_DTOR constexpr
1014# define Q_DECL_CONSTEXPR_DTOR inline
1018#ifndef Q_CONSTEXPR_DTOR
1019# if __cpp_constexpr
>= 201907L
1020# define Q_CONSTEXPR_DTOR constexpr
1022# define Q_CONSTEXPR_DTOR const
1026#ifndef Q_DECL_EQ_DELETE_X
1030# if defined(__cpp_deleted_function) && __cpp_deleted_function >= 202403L
1031 && (!defined(Q_CC_CLANG_ONLY
) || __cplusplus
> 202302L
)
1032# define Q_DECL_EQ_DELETE_X(reason) = delete(reason)
1034# define Q_DECL_EQ_DELETE_X(reason) = delete
1038#ifndef Q_LIKELY_BRANCH
1040# define Q_LIKELY_BRANCH [[likely]]
1041# define Q_UNLIKELY_BRANCH [[unlikely]]
1043# define Q_LIKELY_BRANCH
1044# define Q_UNLIKELY_BRANCH
1049
1050
1056# define Q_LIKELY(x) (x)
1059# define Q_UNLIKELY(x) (x)
1062# define Q_ASSUME_IMPL(expr) qt_noop()
1065# define Q_UNREACHABLE_IMPL() qt_noop()
1068# define Q_ALLOC_SIZE(x)
1071# define Q_REQUIRED_RESULT
1074# define Q_NODISCARD_X(message) Q_REQUIRED_RESULT
1077# define Q_NODISCARD_CTOR
1080# define Q_NODISCARD_CTOR_X(message) Q_NODISCARD_CTOR
1083# define Q_DECL_DEPRECATED
1085#ifndef Q_DECL_VARIABLE_DEPRECATED
1089# define Q_DECL_DEPRECATED_X(text) Q_DECL_DEPRECATED
1092# define Q_DECL_EXPORT
1095# define Q_DECL_EXPORT_OVERRIDABLE Q_DECL_EXPORT
1098# define Q_DECL_IMPORT
1101# define Q_DECL_HIDDEN
1104# define Q_DECL_UNUSED
1107# define Q_DECL_UNUSED_MEMBER
1110# if defined(Q_OS_SOLARIS) || defined(Q_CC_XLC)
1111# define Q_FUNC_INFO __FILE__ "(line number unavailable)"
1113# define Q_FUNC_INFO __FILE__ ":" QT_STRINGIFY(__LINE__)
1116#ifndef Q_DECL_CF_RETURNS_RETAINED
1117# define Q_DECL_CF_RETURNS_RETAINED
1119#ifndef Q_DECL_NS_RETURNS_AUTORELEASED
1120# define Q_DECL_NS_RETURNS_AUTORELEASED
1123# define Q_DECL_PURE_FUNCTION
1126# define Q_DECL_CONST_FUNCTION Q_DECL_PURE_FUNCTION
1129# define Q_DECL_COLD_FUNCTION
1131#ifndef QT_MAKE_UNCHECKED_ARRAY_ITERATOR
1132# define QT_MAKE_UNCHECKED_ARRAY_ITERATOR(x) (x)
1134#ifndef QT_MAKE_CHECKED_ARRAY_ITERATOR
1135# define QT_MAKE_CHECKED_ARRAY_ITERATOR(x, N) (x)
1139
1140
1141
1143# define Q_WEAK_OVERLOAD template <typename = void>
1145# define Q_WEAK_OVERLOAD
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1167# define QT_POST_CXX17_API_IN_EXPORTED_CLASS template <typename = void>
1169# define QT_POST_CXX17_API_IN_EXPORTED_CLASS
1173
1174
1176#define QT_DO_PRAGMA(text) _Pragma(#text)
1177#if defined(Q_CC_MSVC) && !defined(Q_CC_CLANG
)
1179# define QT_WARNING_PUSH __pragma(warning(push))
1180# define QT_WARNING_POP __pragma(warning(pop))
1181# define QT_WARNING_DISABLE_MSVC(number) __pragma(warning(disable: number))
1182# define QT_WARNING_DISABLE_INTEL(number)
1183# define QT_WARNING_DISABLE_CLANG(text)
1184# define QT_WARNING_DISABLE_GCC(text)
1185# define QT_WARNING_DISABLE_DEPRECATED QT_WARNING_DISABLE_MSVC(4996
)
1186# define QT_WARNING_DISABLE_FLOAT_COMPARE
1187# define QT_WARNING_DISABLE_INVALID_OFFSETOF
1188#elif defined(Q_CC_CLANG
)
1189# define QT_WARNING_PUSH QT_DO_PRAGMA(clang diagnostic push)
1190# define QT_WARNING_POP QT_DO_PRAGMA(clang diagnostic pop)
1191# define QT_WARNING_DISABLE_CLANG(text) QT_DO_PRAGMA(clang diagnostic ignored text)
1192# define QT_WARNING_DISABLE_GCC(text)
1193# define QT_WARNING_DISABLE_INTEL(number)
1194# define QT_WARNING_DISABLE_MSVC(number)
1198#elif defined(Q_CC_GNU) && (__GNUC__ * 100
+ __GNUC_MINOR__ >= 406
)
1199# define QT_WARNING_PUSH QT_DO_PRAGMA(GCC diagnostic push)
1200# define QT_WARNING_POP QT_DO_PRAGMA(GCC diagnostic pop)
1201# define QT_WARNING_DISABLE_GCC(text) QT_DO_PRAGMA(GCC diagnostic ignored text)
1202# define QT_WARNING_DISABLE_CLANG(text)
1203# define QT_WARNING_DISABLE_INTEL(number)
1204# define QT_WARNING_DISABLE_MSVC(number)
1205# define QT_WARNING_DISABLE_DEPRECATED QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations")
1206# define QT_WARNING_DISABLE_FLOAT_COMPARE QT_WARNING_DISABLE_GCC("-Wfloat-equal")
1207# define QT_WARNING_DISABLE_INVALID_OFFSETOF QT_WARNING_DISABLE_GCC("-Winvalid-offsetof")
1209# define QT_WARNING_DISABLE_GCC(text)
1210# define QT_WARNING_PUSH
1211# define QT_WARNING_POP
1212# define QT_WARNING_DISABLE_INTEL(number)
1213# define QT_WARNING_DISABLE_MSVC(number)
1214# define QT_WARNING_DISABLE_CLANG(text)
1215# define QT_WARNING_DISABLE_GCC(text)
1216# define QT_WARNING_DISABLE_DEPRECATED
1217# define QT_WARNING_DISABLE_FLOAT_COMPARE
1218# define QT_WARNING_DISABLE_INVALID_OFFSETOF
1221#ifndef QT_IGNORE_DEPRECATIONS
1222#define QT_IGNORE_DEPRECATIONS(statement)
1236#define Q_OFFSETOF(Class, member)
1239 return offsetof(Class, member);
1244
1245
1246#ifndef QT_NO_KEYWORDS
1247# if defined(Q_CC_MIPS) || (defined(Q_CC_HPACC) && defined(__ia64))
1248# define for if (0
) {} else for
1252#ifdef Q_COMPILER_RVALUE_REFS
1253#define qMove(x) std::move(x)
1258#if defined(__cplusplus
)
1260# define Q_FALLTHROUGH() [[clang::fallthrough]]
1261#elif __has_cpp_attribute(gnu::fallthrough)
1262# define Q_FALLTHROUGH() [[gnu::fallthrough]]
1263#elif __has_cpp_attribute(fallthrough)
1264# define Q_FALLTHROUGH() [[fallthrough]]
1269# define Q_FALLTHROUGH() __attribute__((fallthrough))
1271# define Q_FALLTHROUGH() (void)0
1277
1278
1279#if !defined(Q_PROCESSOR_X86)
1280# undef QT_COMPILER_SUPPORTS_SSE2
1281# undef QT_COMPILER_SUPPORTS_SSE3
1282# undef QT_COMPILER_SUPPORTS_SSSE3
1283# undef QT_COMPILER_SUPPORTS_SSE4_1
1284# undef QT_COMPILER_SUPPORTS_SSE4_2
1285# undef QT_COMPILER_SUPPORTS_AVX
1286# undef QT_COMPILER_SUPPORTS_AVX2
1287# undef QT_COMPILER_SUPPORTS_F16C
1289#if !defined(Q_PROCESSOR_ARM)
1290# undef QT_COMPILER_SUPPORTS_NEON
1292#if !defined(Q_PROCESSOR_MIPS)
1293# undef QT_COMPILER_SUPPORTS_MIPS_DSP
1294# undef QT_COMPILER_SUPPORTS_MIPS_DSPR2
1298#if defined(__cplusplus
) && (__cplusplus
< 201703L
)
1300# error "Qt requires a C++17 compiler, and a suitable value for __cplusplus. On MSVC, you must pass the /Zc:__cplusplus option to the compiler."
1302# error "Qt requires a C++17 compiler"
1306#if defined(__cplusplus
) && defined(Q_CC_MSVC) && !defined(Q_CC_CLANG
)
1307# if Q_CC_MSVC < 1927
1309# error "Qt requires at least Visual Studio 2019 version 16.7 (VC++ version 14.27). Please upgrade."
1316static_assert(!std::is_convertible_v<std::nullptr_t,
bool>,
1317 "On MSVC you must pass the /permissive- option to the compiler.");
1320#if defined(QT_BOOTSTRAPPED) || defined(QT_USE_PROTECTED_VISIBILITY) || !defined(__ELF__
) || defined(__PIC__
)
1322#elif defined(QT_REDUCE_RELOCATIONS)
1323# error "You must build your code with position independent code if Qt was configured with -reduce-relocations. "
1324 "Compile your code with -fPIC (and not with -fPIE)."
1327#ifdef Q_PROCESSOR_X86_32
1328# if defined(Q_CC_GNU)
1329# define QT_FASTCALL __attribute__((regparm(3
)))
1330# elif defined(Q_CC_MSVC)
1331# define QT_FASTCALL __fastcall
1340#if defined(Q_CC_GNU
) && !defined(__INSURE__)
1341# if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG
)
1342# define Q_ATTRIBUTE_FORMAT_PRINTF(A, B)
1343 __attribute__((format(gnu_printf, (A), (B))))
1345# define Q_ATTRIBUTE_FORMAT_PRINTF(A, B)
1346 __attribute__((format(printf, (A), (B))))
1349# define Q_ATTRIBUTE_FORMAT_PRINTF(A, B)
1353# define Q_NEVER_INLINE __declspec(noinline)
1354# define Q_ALWAYS_INLINE __forceinline
1355#elif defined(Q_CC_GNU
)
1356# define Q_NEVER_INLINE __attribute__((noinline))
1357# define Q_ALWAYS_INLINE inline __attribute__((always_inline))
1359# define Q_NEVER_INLINE
1360# define Q_ALWAYS_INLINE inline
1365#if defined(Q_OS_WIN)
1366# if defined(Q_CC_MINGW) && defined(Q_PROCESSOR_X86_32)
1367# define QT_ENSURE_STACK_ALIGNED_FOR_SSE __attribute__ ((force_align_arg_pointer))
1369# define QT_ENSURE_STACK_ALIGNED_FOR_SSE
1371# define QT_WIN_CALLBACK CALLBACK QT_ENSURE_STACK_ALIGNED_FOR_SSE
1374#ifdef __cpp_conditional_explicit
1375#define Q_IMPLICIT explicit(false)
1380#if defined(__cplusplus
)
1382#ifdef __cpp_constinit
1383# if defined(Q_CC_MSVC) && !defined(Q_CC_CLANG)
1387# define Q_CONSTINIT constinit
1390# define Q_CONSTINIT [[clang::require_constant_initialization]]
1391#elif defined(Q_CC_GNU_ONLY) && Q_CC_GNU >= 1000
1392# define Q_CONSTINIT __constinit
1397#ifndef Q_OUTOFLINE_TEMPLATE
1398# define Q_OUTOFLINE_TEMPLATE
1400#ifndef Q_INLINE_TEMPLATE
1401# define Q_INLINE_TEMPLATE inline
1405
1406
1407
1408
1409#if !defined(QT_CC_WARNINGS)
1410# define QT_NO_WARNINGS
1412#if defined(QT_NO_WARNINGS
)
1413# if defined(Q_CC_MSVC)
1414QT_WARNING_DISABLE_MSVC(4251)
1415QT_WARNING_DISABLE_MSVC(4244)
1416QT_WARNING_DISABLE_MSVC(4275)
1417QT_WARNING_DISABLE_MSVC(4514)
1418QT_WARNING_DISABLE_MSVC(4800)
1419QT_WARNING_DISABLE_MSVC(4097)
1420QT_WARNING_DISABLE_MSVC(4706)
1421QT_WARNING_DISABLE_MSVC(4355)
1422QT_WARNING_DISABLE_MSVC(4710)
1423QT_WARNING_DISABLE_MSVC(4530)
1424# elif defined(Q_CC_BOR)
1425# pragma option -w-inl
1426# pragma option -w-aus
1435#if !defined(QT_NO_EXCEPTIONS)
1436# if !defined(Q_MOC_RUN)
1437# if defined(Q_CC_GNU
) && !defined(__cpp_exceptions
)
1438# define QT_NO_EXCEPTIONS
1440# elif defined(QT_BOOTSTRAPPED)
1441# define QT_NO_EXCEPTIONS
1446#if __cplusplus
>= 202002L
&& (!defined(_GLIBCXX_RELEASE
) || _GLIBCXX_RELEASE
>= 11
)
1447# define QT_COMPILER_HAS_LWG3346
1450#if defined(__cplusplus
) && __cplusplus
>= 202002L
1451# if !defined(Q_CC_MSVC_ONLY) || Q_CC_MSVC >= 1939
1454# define QT_COMPILER_HAS_P0846
1458#ifdef QT_COMPILER_HAS_P0846
1459# define QT_ENABLE_P0846_SEMANTICS_FOR(func)
1461 class QT_CLASS_JUST_FOR_P0846_SIMULATION;
1462# define QT_ENABLE_P0846_SEMANTICS_FOR(func)
1463 template <typename T>
1464 void func (QT_CLASS_JUST_FOR_P0846_SIMULATION *);
#define __has_include_next(x)
#define Q_NODISCARD_X(message)
#define Q_ASSUME_IMPL(expr)
#define Q_DECL_DEPRECATED_X(text)
#define Q_UNREACHABLE_IMPL()
#define __has_attribute(x)
#define Q_DECL_PURE_FUNCTION
#define Q_DECL_CONST_FUNCTION
#define QT_WARNING_DISABLE_DEPRECATED
#define Q_DECL_DEPRECATED
#define QT_DO_PRAGMA(text)
#define Q_DECL_COLD_FUNCTION
#define QT_WARNING_DISABLE_GCC(text)
#define QT_WARNING_DISABLE_INVALID_OFFSETOF
#define Q_DECL_UNUSED_MEMBER
#define Q_NODISCARD_CTOR_X(message)
#define Q_REQUIRED_RESULT
#define QT_WARNING_DISABLE_CLANG(text)
#define Q_DECL_EXPORT_OVERRIDABLE
#define __has_cpp_attribute(x)
#define QT_FT_MAX_GRAY_SPANS
static int gray_move_to(const QT_FT_Vector *to, PWorker worker)
static void gray_record_cell(RAS_ARG)
#define QT_FT_MEM_ZERO(dest, count)
#define ErrRaster_Memory_Overflow
static PCell gray_find_cell(RAS_ARG)
static void gray_raster_done(QT_FT_Raster raster)
static void gray_render_line(RAS_ARG_ TPos to_x, TPos to_y)
static int gray_convert_glyph_inner(RAS_ARG)
static void gray_start_cell(RAS_ARG_ TCoord ex, TCoord ey)
static void gray_split_conic(QT_FT_Vector *base)
#define ErrRaster_Invalid_Argument
static int gray_raster_new(QT_FT_Raster *araster)
static int QT_FT_Outline_Decompose(const QT_FT_Outline *outline, void *user)
#define QT_FT_DIV_MOD(type, dividend, divisor, quotient, remainder)
#define QT_FT_HYPOT(x, y)
static void gray_render_cubic(RAS_ARG_ const QT_FT_Vector *control1, const QT_FT_Vector *control2, const QT_FT_Vector *to)
static int gray_convert_glyph(RAS_ARG)
#define QT_FT_ERR_XCAT(x, y)
static int gray_raster_render(QT_FT_Raster raster, const QT_FT_Raster_Params *params)
#define ErrRaster_Invalid_Mode
static void gray_raster_reset(QT_FT_Raster raster, char *pool_base, long pool_size)
int q_gray_rendered_spans(TRaster *raster)
static void gray_compute_cbox(RAS_ARG)
static void gray_set_cell(RAS_ARG_ TCoord ex, TCoord ey)
#define ErrRaster_OutOfMemory
const QT_FT_Raster_Funcs qt_ft_grays_raster
#define QT_FT_ERR_CAT(x, y)
#define QT_FT_MEM_SET(d, s, c)
static void gray_init_cells(RAS_ARG_ void *buffer, long byte_size)
static void gray_render_conic(RAS_ARG_ const QT_FT_Vector *control, const QT_FT_Vector *to)
static void gray_sweep(RAS_ARG_ const QT_FT_Bitmap *target)
static void gray_render_scanline(RAS_ARG_ TCoord ey, TPos x1, TCoord y1, TPos x2, TCoord y2)
static void gray_render_span(int count, const QT_FT_Span *spans, PWorker worker)
#define ErrRaster_Invalid_Outline
static void gray_split_cubic(QT_FT_Vector *base)
static void gray_hline(RAS_ARG_ TCoord x, TCoord y, TPos area, int acount)
#define __has_extension(X)
long buffer_allocated_size
qt_ft_jmp_buf jump_buffer
QT_FT_Raster_Span_Func render_span
QT_FT_Span gray_spans[QT_FT_MAX_GRAY_SPANS]