WPILibC++ 2024.1.1-beta-4
hedley.h
Go to the documentation of this file.
1#pragma once
2
3// __ _____ _____ _____
4// __| | __| | | | JSON for Modern C++
5// | | |__ | | | | | | version 3.11.2
6// |_____|_____|_____|_|___| https://github.com/nlohmann/json
7//
8// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
9// SPDX-FileCopyrightText: 2016-2021 Evan Nemerson <evan@nemerson.com>
10// SPDX-License-Identifier: MIT
11
12/* Hedley - https://nemequ.github.io/hedley
13 * Created by Evan Nemerson <evan@nemerson.com>
14 */
15
16#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15)
17#if defined(JSON_HEDLEY_VERSION)
18 #undef JSON_HEDLEY_VERSION
19#endif
20#define JSON_HEDLEY_VERSION 15
21
22#if defined(JSON_HEDLEY_STRINGIFY_EX)
23 #undef JSON_HEDLEY_STRINGIFY_EX
24#endif
25#define JSON_HEDLEY_STRINGIFY_EX(x) #x
26
27#if defined(JSON_HEDLEY_STRINGIFY)
28 #undef JSON_HEDLEY_STRINGIFY
29#endif
30#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x)
31
32#if defined(JSON_HEDLEY_CONCAT_EX)
33 #undef JSON_HEDLEY_CONCAT_EX
34#endif
35#define JSON_HEDLEY_CONCAT_EX(a,b) a##b
36
37#if defined(JSON_HEDLEY_CONCAT)
38 #undef JSON_HEDLEY_CONCAT
39#endif
40#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b)
41
42#if defined(JSON_HEDLEY_CONCAT3_EX)
43 #undef JSON_HEDLEY_CONCAT3_EX
44#endif
45#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c
46
47#if defined(JSON_HEDLEY_CONCAT3)
48 #undef JSON_HEDLEY_CONCAT3
49#endif
50#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c)
51
52#if defined(JSON_HEDLEY_VERSION_ENCODE)
53 #undef JSON_HEDLEY_VERSION_ENCODE
54#endif
55#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision))
56
57#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR)
58 #undef JSON_HEDLEY_VERSION_DECODE_MAJOR
59#endif
60#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000)
61
62#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR)
63 #undef JSON_HEDLEY_VERSION_DECODE_MINOR
64#endif
65#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000)
66
67#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION)
68 #undef JSON_HEDLEY_VERSION_DECODE_REVISION
69#endif
70#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000)
71
72#if defined(JSON_HEDLEY_GNUC_VERSION)
73 #undef JSON_HEDLEY_GNUC_VERSION
74#endif
75#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
76 #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
77#elif defined(__GNUC__)
78 #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0)
79#endif
80
81#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK)
82 #undef JSON_HEDLEY_GNUC_VERSION_CHECK
83#endif
84#if defined(JSON_HEDLEY_GNUC_VERSION)
85 #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
86#else
87 #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0)
88#endif
89
90#if defined(JSON_HEDLEY_MSVC_VERSION)
91 #undef JSON_HEDLEY_MSVC_VERSION
92#endif
93#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL)
94 #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100)
95#elif defined(_MSC_FULL_VER) && !defined(__ICL)
96 #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10)
97#elif defined(_MSC_VER) && !defined(__ICL)
98 #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0)
99#endif
100
101#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK)
102 #undef JSON_HEDLEY_MSVC_VERSION_CHECK
103#endif
104#if !defined(JSON_HEDLEY_MSVC_VERSION)
105 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0)
106#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
107 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
108#elif defined(_MSC_VER) && (_MSC_VER >= 1200)
109 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
110#else
111 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor)))
112#endif
113
114#if defined(JSON_HEDLEY_INTEL_VERSION)
115 #undef JSON_HEDLEY_INTEL_VERSION
116#endif
117#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL)
118 #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE)
119#elif defined(__INTEL_COMPILER) && !defined(__ICL)
120 #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
121#endif
122
123#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK)
124 #undef JSON_HEDLEY_INTEL_VERSION_CHECK
125#endif
126#if defined(JSON_HEDLEY_INTEL_VERSION)
127 #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
128#else
129 #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0)
130#endif
131
132#if defined(JSON_HEDLEY_INTEL_CL_VERSION)
133 #undef JSON_HEDLEY_INTEL_CL_VERSION
134#endif
135#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL)
136 #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0)
137#endif
138
139#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK)
140 #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK
141#endif
142#if defined(JSON_HEDLEY_INTEL_CL_VERSION)
143 #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
144#else
145 #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0)
146#endif
147
148#if defined(JSON_HEDLEY_PGI_VERSION)
149 #undef JSON_HEDLEY_PGI_VERSION
150#endif
151#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)
152 #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)
153#endif
154
155#if defined(JSON_HEDLEY_PGI_VERSION_CHECK)
156 #undef JSON_HEDLEY_PGI_VERSION_CHECK
157#endif
158#if defined(JSON_HEDLEY_PGI_VERSION)
159 #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
160#else
161 #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0)
162#endif
163
164#if defined(JSON_HEDLEY_SUNPRO_VERSION)
165 #undef JSON_HEDLEY_SUNPRO_VERSION
166#endif
167#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
168 #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10)
169#elif defined(__SUNPRO_C)
170 #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf)
171#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
172 #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10)
173#elif defined(__SUNPRO_CC)
174 #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf)
175#endif
176
177#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK)
178 #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK
179#endif
180#if defined(JSON_HEDLEY_SUNPRO_VERSION)
181 #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
182#else
183 #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0)
184#endif
185
186#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)
187 #undef JSON_HEDLEY_EMSCRIPTEN_VERSION
188#endif
189#if defined(__EMSCRIPTEN__)
190 #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__)
191#endif
192
193#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK)
194 #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK
195#endif
196#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)
197 #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
198#else
199 #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0)
200#endif
201
202#if defined(JSON_HEDLEY_ARM_VERSION)
203 #undef JSON_HEDLEY_ARM_VERSION
204#endif
205#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
206 #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100)
207#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
208 #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100)
209#endif
210
211#if defined(JSON_HEDLEY_ARM_VERSION_CHECK)
212 #undef JSON_HEDLEY_ARM_VERSION_CHECK
213#endif
214#if defined(JSON_HEDLEY_ARM_VERSION)
215 #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
216#else
217 #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0)
218#endif
219
220#if defined(JSON_HEDLEY_IBM_VERSION)
221 #undef JSON_HEDLEY_IBM_VERSION
222#endif
223#if defined(__ibmxl__)
224 #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__)
225#elif defined(__xlC__) && defined(__xlC_ver__)
226 #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)
227#elif defined(__xlC__)
228 #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0)
229#endif
230
231#if defined(JSON_HEDLEY_IBM_VERSION_CHECK)
232 #undef JSON_HEDLEY_IBM_VERSION_CHECK
233#endif
234#if defined(JSON_HEDLEY_IBM_VERSION)
235 #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
236#else
237 #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0)
238#endif
239
240#if defined(JSON_HEDLEY_TI_VERSION)
241 #undef JSON_HEDLEY_TI_VERSION
242#endif
243#if \
244 defined(__TI_COMPILER_VERSION__) && \
245 ( \
246 defined(__TMS470__) || defined(__TI_ARM__) || \
247 defined(__MSP430__) || \
248 defined(__TMS320C2000__) \
249 )
250#if (__TI_COMPILER_VERSION__ >= 16000000)
251 #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
252#endif
253#endif
254
255#if defined(JSON_HEDLEY_TI_VERSION_CHECK)
256 #undef JSON_HEDLEY_TI_VERSION_CHECK
257#endif
258#if defined(JSON_HEDLEY_TI_VERSION)
259 #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
260#else
261 #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0)
262#endif
263
264#if defined(JSON_HEDLEY_TI_CL2000_VERSION)
265 #undef JSON_HEDLEY_TI_CL2000_VERSION
266#endif
267#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__)
268 #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
269#endif
270
271#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK)
272 #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK
273#endif
274#if defined(JSON_HEDLEY_TI_CL2000_VERSION)
275 #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
276#else
277 #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0)
278#endif
279
280#if defined(JSON_HEDLEY_TI_CL430_VERSION)
281 #undef JSON_HEDLEY_TI_CL430_VERSION
282#endif
283#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__)
284 #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
285#endif
286
287#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK)
288 #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK
289#endif
290#if defined(JSON_HEDLEY_TI_CL430_VERSION)
291 #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
292#else
293 #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0)
294#endif
295
296#if defined(JSON_HEDLEY_TI_ARMCL_VERSION)
297 #undef JSON_HEDLEY_TI_ARMCL_VERSION
298#endif
299#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__))
300 #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
301#endif
302
303#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK)
304 #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK
305#endif
306#if defined(JSON_HEDLEY_TI_ARMCL_VERSION)
307 #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
308#else
309 #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0)
310#endif
311
312#if defined(JSON_HEDLEY_TI_CL6X_VERSION)
313 #undef JSON_HEDLEY_TI_CL6X_VERSION
314#endif
315#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__)
316 #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
317#endif
318
319#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK)
320 #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK
321#endif
322#if defined(JSON_HEDLEY_TI_CL6X_VERSION)
323 #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
324#else
325 #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0)
326#endif
327
328#if defined(JSON_HEDLEY_TI_CL7X_VERSION)
329 #undef JSON_HEDLEY_TI_CL7X_VERSION
330#endif
331#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__)
332 #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
333#endif
334
335#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK)
336 #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK
337#endif
338#if defined(JSON_HEDLEY_TI_CL7X_VERSION)
339 #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
340#else
341 #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0)
342#endif
343
344#if defined(JSON_HEDLEY_TI_CLPRU_VERSION)
345 #undef JSON_HEDLEY_TI_CLPRU_VERSION
346#endif
347#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__)
348 #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
349#endif
350
351#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK)
352 #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK
353#endif
354#if defined(JSON_HEDLEY_TI_CLPRU_VERSION)
355 #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
356#else
357 #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0)
358#endif
359
360#if defined(JSON_HEDLEY_CRAY_VERSION)
361 #undef JSON_HEDLEY_CRAY_VERSION
362#endif
363#if defined(_CRAYC)
364 #if defined(_RELEASE_PATCHLEVEL)
365 #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL)
366 #else
367 #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0)
368 #endif
369#endif
370
371#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK)
372 #undef JSON_HEDLEY_CRAY_VERSION_CHECK
373#endif
374#if defined(JSON_HEDLEY_CRAY_VERSION)
375 #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
376#else
377 #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0)
378#endif
379
380#if defined(JSON_HEDLEY_IAR_VERSION)
381 #undef JSON_HEDLEY_IAR_VERSION
382#endif
383#if defined(__IAR_SYSTEMS_ICC__)
384 #if __VER__ > 1000
385 #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000))
386 #else
387 #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0)
388 #endif
389#endif
390
391#if defined(JSON_HEDLEY_IAR_VERSION_CHECK)
392 #undef JSON_HEDLEY_IAR_VERSION_CHECK
393#endif
394#if defined(JSON_HEDLEY_IAR_VERSION)
395 #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
396#else
397 #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0)
398#endif
399
400#if defined(JSON_HEDLEY_TINYC_VERSION)
401 #undef JSON_HEDLEY_TINYC_VERSION
402#endif
403#if defined(__TINYC__)
404 #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)
405#endif
406
407#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK)
408 #undef JSON_HEDLEY_TINYC_VERSION_CHECK
409#endif
410#if defined(JSON_HEDLEY_TINYC_VERSION)
411 #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
412#else
413 #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0)
414#endif
415
416#if defined(JSON_HEDLEY_DMC_VERSION)
417 #undef JSON_HEDLEY_DMC_VERSION
418#endif
419#if defined(__DMC__)
420 #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf)
421#endif
422
423#if defined(JSON_HEDLEY_DMC_VERSION_CHECK)
424 #undef JSON_HEDLEY_DMC_VERSION_CHECK
425#endif
426#if defined(JSON_HEDLEY_DMC_VERSION)
427 #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
428#else
429 #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0)
430#endif
431
432#if defined(JSON_HEDLEY_COMPCERT_VERSION)
433 #undef JSON_HEDLEY_COMPCERT_VERSION
434#endif
435#if defined(__COMPCERT_VERSION__)
436 #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100)
437#endif
438
439#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK)
440 #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK
441#endif
442#if defined(JSON_HEDLEY_COMPCERT_VERSION)
443 #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
444#else
445 #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0)
446#endif
447
448#if defined(JSON_HEDLEY_PELLES_VERSION)
449 #undef JSON_HEDLEY_PELLES_VERSION
450#endif
451#if defined(__POCC__)
452 #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0)
453#endif
454
455#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK)
456 #undef JSON_HEDLEY_PELLES_VERSION_CHECK
457#endif
458#if defined(JSON_HEDLEY_PELLES_VERSION)
459 #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
460#else
461 #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0)
462#endif
463
464#if defined(JSON_HEDLEY_MCST_LCC_VERSION)
465 #undef JSON_HEDLEY_MCST_LCC_VERSION
466#endif
467#if defined(__LCC__) && defined(__LCC_MINOR__)
468 #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__)
469#endif
470
471#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK)
472 #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK
473#endif
474#if defined(JSON_HEDLEY_MCST_LCC_VERSION)
475 #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
476#else
477 #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0)
478#endif
479
480#if defined(JSON_HEDLEY_GCC_VERSION)
481 #undef JSON_HEDLEY_GCC_VERSION
482#endif
483#if \
484 defined(JSON_HEDLEY_GNUC_VERSION) && \
485 !defined(__clang__) && \
486 !defined(JSON_HEDLEY_INTEL_VERSION) && \
487 !defined(JSON_HEDLEY_PGI_VERSION) && \
488 !defined(JSON_HEDLEY_ARM_VERSION) && \
489 !defined(JSON_HEDLEY_CRAY_VERSION) && \
490 !defined(JSON_HEDLEY_TI_VERSION) && \
491 !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \
492 !defined(JSON_HEDLEY_TI_CL430_VERSION) && \
493 !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \
494 !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \
495 !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \
496 !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \
497 !defined(__COMPCERT__) && \
498 !defined(JSON_HEDLEY_MCST_LCC_VERSION)
499 #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION
500#endif
501
502#if defined(JSON_HEDLEY_GCC_VERSION_CHECK)
503 #undef JSON_HEDLEY_GCC_VERSION_CHECK
504#endif
505#if defined(JSON_HEDLEY_GCC_VERSION)
506 #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
507#else
508 #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0)
509#endif
510
511#if defined(JSON_HEDLEY_HAS_ATTRIBUTE)
512 #undef JSON_HEDLEY_HAS_ATTRIBUTE
513#endif
514#if \
515 defined(__has_attribute) && \
516 ( \
517 (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \
518 )
519# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute)
520#else
521# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0)
522#endif
523
524#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE)
525 #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE
526#endif
527#if defined(__has_attribute)
528 #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
529#else
530 #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
531#endif
532
533#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE)
534 #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE
535#endif
536#if defined(__has_attribute)
537 #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
538#else
539 #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
540#endif
541
542#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE)
543 #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE
544#endif
545#if \
546 defined(__has_cpp_attribute) && \
547 defined(__cplusplus) && \
548 (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0))
549 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute)
550#else
551 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0)
552#endif
553
554#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS)
555 #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS
556#endif
557#if !defined(__cplusplus) || !defined(__has_cpp_attribute)
558 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)
559#elif \
560 !defined(JSON_HEDLEY_PGI_VERSION) && \
561 !defined(JSON_HEDLEY_IAR_VERSION) && \
562 (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \
563 (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0))
564 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute)
565#else
566 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)
567#endif
568
569#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE)
570 #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE
571#endif
572#if defined(__has_cpp_attribute) && defined(__cplusplus)
573 #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)
574#else
575 #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
576#endif
577
578#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE)
579 #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE
580#endif
581#if defined(__has_cpp_attribute) && defined(__cplusplus)
582 #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)
583#else
584 #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
585#endif
586
587#if defined(JSON_HEDLEY_HAS_BUILTIN)
588 #undef JSON_HEDLEY_HAS_BUILTIN
589#endif
590#if defined(__has_builtin)
591 #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin)
592#else
593 #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0)
594#endif
595
596#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN)
597 #undef JSON_HEDLEY_GNUC_HAS_BUILTIN
598#endif
599#if defined(__has_builtin)
600 #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)
601#else
602 #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
603#endif
604
605#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN)
606 #undef JSON_HEDLEY_GCC_HAS_BUILTIN
607#endif
608#if defined(__has_builtin)
609 #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)
610#else
611 #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
612#endif
613
614#if defined(JSON_HEDLEY_HAS_FEATURE)
615 #undef JSON_HEDLEY_HAS_FEATURE
616#endif
617#if defined(__has_feature)
618 #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature)
619#else
620 #define JSON_HEDLEY_HAS_FEATURE(feature) (0)
621#endif
622
623#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE)
624 #undef JSON_HEDLEY_GNUC_HAS_FEATURE
625#endif
626#if defined(__has_feature)
627 #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)
628#else
629 #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
630#endif
631
632#if defined(JSON_HEDLEY_GCC_HAS_FEATURE)
633 #undef JSON_HEDLEY_GCC_HAS_FEATURE
634#endif
635#if defined(__has_feature)
636 #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)
637#else
638 #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
639#endif
640
641#if defined(JSON_HEDLEY_HAS_EXTENSION)
642 #undef JSON_HEDLEY_HAS_EXTENSION
643#endif
644#if defined(__has_extension)
645 #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension)
646#else
647 #define JSON_HEDLEY_HAS_EXTENSION(extension) (0)
648#endif
649
650#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION)
651 #undef JSON_HEDLEY_GNUC_HAS_EXTENSION
652#endif
653#if defined(__has_extension)
654 #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)
655#else
656 #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
657#endif
658
659#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION)
660 #undef JSON_HEDLEY_GCC_HAS_EXTENSION
661#endif
662#if defined(__has_extension)
663 #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)
664#else
665 #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
666#endif
667
668#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE)
669 #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE
670#endif
671#if defined(__has_declspec_attribute)
672 #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute)
673#else
674 #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0)
675#endif
676
677#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE)
678 #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE
679#endif
680#if defined(__has_declspec_attribute)
681 #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)
682#else
683 #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
684#endif
685
686#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE)
687 #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE
688#endif
689#if defined(__has_declspec_attribute)
690 #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)
691#else
692 #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
693#endif
694
695#if defined(JSON_HEDLEY_HAS_WARNING)
696 #undef JSON_HEDLEY_HAS_WARNING
697#endif
698#if defined(__has_warning)
699 #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning)
700#else
701 #define JSON_HEDLEY_HAS_WARNING(warning) (0)
702#endif
703
704#if defined(JSON_HEDLEY_GNUC_HAS_WARNING)
705 #undef JSON_HEDLEY_GNUC_HAS_WARNING
706#endif
707#if defined(__has_warning)
708 #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)
709#else
710 #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
711#endif
712
713#if defined(JSON_HEDLEY_GCC_HAS_WARNING)
714 #undef JSON_HEDLEY_GCC_HAS_WARNING
715#endif
716#if defined(__has_warning)
717 #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)
718#else
719 #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
720#endif
721
722#if \
723 (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
724 defined(__clang__) || \
725 JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \
726 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
727 JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \
728 JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \
729 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
730 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
731 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \
732 JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \
733 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \
734 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \
735 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
736 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
737 JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \
738 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \
739 JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \
740 (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR))
741 #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value)
742#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
743 #define JSON_HEDLEY_PRAGMA(value) __pragma(value)
744#else
745 #define JSON_HEDLEY_PRAGMA(value)
746#endif
747
748#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH)
749 #undef JSON_HEDLEY_DIAGNOSTIC_PUSH
750#endif
751#if defined(JSON_HEDLEY_DIAGNOSTIC_POP)
752 #undef JSON_HEDLEY_DIAGNOSTIC_POP
753#endif
754#if defined(__clang__)
755 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push")
756 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop")
757#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
758 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
759 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
760#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)
761 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
762 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
763#elif \
764 JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \
765 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
766 #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push))
767 #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop))
768#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0)
769 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push")
770 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop")
771#elif \
772 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
773 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
774 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \
775 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \
776 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
777 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)
778 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push")
779 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop")
780#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)
781 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
782 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
783#else
784 #define JSON_HEDLEY_DIAGNOSTIC_PUSH
785 #define JSON_HEDLEY_DIAGNOSTIC_POP
786#endif
787
788/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for
789 HEDLEY INTERNAL USE ONLY. API subject to change without notice. */
790#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)
791 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_
792#endif
793#if defined(__cplusplus)
794# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat")
795# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions")
796# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions")
797# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
798 JSON_HEDLEY_DIAGNOSTIC_PUSH \
799 _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
800 _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
801 _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \
802 xpr \
803 JSON_HEDLEY_DIAGNOSTIC_POP
804# else
805# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
806 JSON_HEDLEY_DIAGNOSTIC_PUSH \
807 _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
808 _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
809 xpr \
810 JSON_HEDLEY_DIAGNOSTIC_POP
811# endif
812# else
813# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
814 JSON_HEDLEY_DIAGNOSTIC_PUSH \
815 _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
816 xpr \
817 JSON_HEDLEY_DIAGNOSTIC_POP
818# endif
819# endif
820#endif
821#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)
822 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x
823#endif
824
825#if defined(JSON_HEDLEY_CONST_CAST)
826 #undef JSON_HEDLEY_CONST_CAST
827#endif
828#if defined(__cplusplus)
829# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast<T>(expr))
830#elif \
831 JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \
832 JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \
833 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
834# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \
835 JSON_HEDLEY_DIAGNOSTIC_PUSH \
836 JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \
837 ((T) (expr)); \
838 JSON_HEDLEY_DIAGNOSTIC_POP \
839 }))
840#else
841# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr))
842#endif
843
844#if defined(JSON_HEDLEY_REINTERPRET_CAST)
845 #undef JSON_HEDLEY_REINTERPRET_CAST
846#endif
847#if defined(__cplusplus)
848 #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast<T>(expr))
849#else
850 #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr))
851#endif
852
853#if defined(JSON_HEDLEY_STATIC_CAST)
854 #undef JSON_HEDLEY_STATIC_CAST
855#endif
856#if defined(__cplusplus)
857 #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast<T>(expr))
858#else
859 #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr))
860#endif
861
862#if defined(JSON_HEDLEY_CPP_CAST)
863 #undef JSON_HEDLEY_CPP_CAST
864#endif
865#if defined(__cplusplus)
866# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast")
867# define JSON_HEDLEY_CPP_CAST(T, expr) \
868 JSON_HEDLEY_DIAGNOSTIC_PUSH \
869 _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \
870 ((T) (expr)) \
871 JSON_HEDLEY_DIAGNOSTIC_POP
872# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0)
873# define JSON_HEDLEY_CPP_CAST(T, expr) \
874 JSON_HEDLEY_DIAGNOSTIC_PUSH \
875 _Pragma("diag_suppress=Pe137") \
876 JSON_HEDLEY_DIAGNOSTIC_POP
877# else
878# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr))
879# endif
880#else
881# define JSON_HEDLEY_CPP_CAST(T, expr) (expr)
882#endif
883
884#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED)
885 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
886#endif
887#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations")
888 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
889#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
890 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)")
891#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
892 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786))
893#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)
894 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445")
895#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
896 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
897#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)
898 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
899#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
900 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996))
901#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
902 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
903#elif \
904 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
905 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
906 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
907 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
908 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
909 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
910 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
911 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
912 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
913 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
914 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)
915 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718")
916#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus)
917 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)")
918#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus)
919 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)")
920#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
921 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215")
922#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)
923 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)")
924#else
925 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
926#endif
927
928#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS)
929 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
930#endif
931#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
932 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
933#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
934 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
935#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
936 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161))
937#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
938 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
939#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)
940 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
941#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
942 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
943#elif \
944 JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \
945 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \
946 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
947 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0)
948 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
949#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0)
950 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
951#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
952 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
953#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
954 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161")
955#else
956 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
957#endif
958
959#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES)
960 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
961#endif
962#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes")
963 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"")
964#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)
965 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
966#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0)
967 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)")
968#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
969 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292))
970#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0)
971 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030))
972#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)
973 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098")
974#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
975 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
976#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)
977 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)")
978#elif \
979 JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \
980 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \
981 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0)
982 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173")
983#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
984 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097")
985#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
986 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
987#else
988 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
989#endif
990
991#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL)
992 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
993#endif
994#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual")
995 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"")
996#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
997 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)")
998#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0)
999 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"")
1000#else
1001 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
1002#endif
1003
1004#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION)
1005 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
1006#endif
1007#if JSON_HEDLEY_HAS_WARNING("-Wunused-function")
1008 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"")
1009#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0)
1010 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"")
1011#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0)
1012 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505))
1013#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1014 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142")
1015#else
1016 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
1017#endif
1018
1019#if defined(JSON_HEDLEY_DEPRECATED)
1020 #undef JSON_HEDLEY_DEPRECATED
1021#endif
1022#if defined(JSON_HEDLEY_DEPRECATED_FOR)
1023 #undef JSON_HEDLEY_DEPRECATED_FOR
1024#endif
1025#if \
1026 JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
1027 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1028 #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since))
1029 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement))
1030#elif \
1031 (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
1032 JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \
1033 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1034 JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \
1035 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \
1036 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1037 JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \
1038 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \
1039 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \
1040 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1041 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \
1042 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1043 #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since)))
1044 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement)))
1045#elif defined(__cplusplus) && (__cplusplus >= 201402L)
1046 #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]])
1047 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]])
1048#elif \
1049 JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \
1050 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1051 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1052 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1053 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1054 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1055 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1056 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1057 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1058 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1059 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1060 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1061 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1062 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1063 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
1064 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1065 #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__))
1066 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__))
1067#elif \
1068 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1069 JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \
1070 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1071 #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated)
1072 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated)
1073#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1074 #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated")
1075 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated")
1076#else
1077 #define JSON_HEDLEY_DEPRECATED(since)
1078 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement)
1079#endif
1080
1081#if defined(JSON_HEDLEY_UNAVAILABLE)
1082 #undef JSON_HEDLEY_UNAVAILABLE
1083#endif
1084#if \
1085 JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \
1086 JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \
1087 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1088 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1089 #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since)))
1090#else
1091 #define JSON_HEDLEY_UNAVAILABLE(available_since)
1092#endif
1093
1094#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT)
1095 #undef JSON_HEDLEY_WARN_UNUSED_RESULT
1096#endif
1097#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG)
1098 #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG
1099#endif
1100#if \
1101 JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \
1102 JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
1103 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1104 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1105 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1106 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1107 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1108 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1109 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1110 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1111 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1112 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1113 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1114 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1115 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \
1116 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1117 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1118 #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
1119 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__))
1120#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L)
1121 #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
1122 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]])
1123#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard)
1124 #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
1125 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
1126#elif defined(_Check_return_) /* SAL */
1127 #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_
1128 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_
1129#else
1130 #define JSON_HEDLEY_WARN_UNUSED_RESULT
1131 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg)
1132#endif
1133
1134#if defined(JSON_HEDLEY_SENTINEL)
1135 #undef JSON_HEDLEY_SENTINEL
1136#endif
1137#if \
1138 JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \
1139 JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
1140 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1141 JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \
1142 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1143 #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position)))
1144#else
1145 #define JSON_HEDLEY_SENTINEL(position)
1146#endif
1147
1148#if defined(JSON_HEDLEY_NO_RETURN)
1149 #undef JSON_HEDLEY_NO_RETURN
1150#endif
1151#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1152 #define JSON_HEDLEY_NO_RETURN __noreturn
1153#elif \
1154 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1155 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1156 #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
1157#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
1158 #define JSON_HEDLEY_NO_RETURN _Noreturn
1159#elif defined(__cplusplus) && (__cplusplus >= 201103L)
1160 #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]])
1161#elif \
1162 JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \
1163 JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \
1164 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1165 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1166 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1167 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1168 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1169 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1170 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1171 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1172 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1173 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1174 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1175 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1176 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1177 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1178 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1179 #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
1180#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1181 #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return")
1182#elif \
1183 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1184 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1185 #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
1186#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)
1187 #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;")
1188#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)
1189 #define JSON_HEDLEY_NO_RETURN __attribute((noreturn))
1190#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)
1191 #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
1192#else
1193 #define JSON_HEDLEY_NO_RETURN
1194#endif
1195
1196#if defined(JSON_HEDLEY_NO_ESCAPE)
1197 #undef JSON_HEDLEY_NO_ESCAPE
1198#endif
1199#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape)
1200 #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__))
1201#else
1202 #define JSON_HEDLEY_NO_ESCAPE
1203#endif
1204
1205#if defined(JSON_HEDLEY_UNREACHABLE)
1206 #undef JSON_HEDLEY_UNREACHABLE
1207#endif
1208#if defined(JSON_HEDLEY_UNREACHABLE_RETURN)
1209 #undef JSON_HEDLEY_UNREACHABLE_RETURN
1210#endif
1211#if defined(JSON_HEDLEY_ASSUME)
1212 #undef JSON_HEDLEY_ASSUME
1213#endif
1214#if \
1215 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1216 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1217 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1218 #define JSON_HEDLEY_ASSUME(expr) __assume(expr)
1219#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume)
1220 #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr)
1221#elif \
1222 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
1223 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)
1224 #if defined(__cplusplus)
1225 #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr)
1226 #else
1227 #define JSON_HEDLEY_ASSUME(expr) _nassert(expr)
1228 #endif
1229#endif
1230#if \
1231 (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \
1232 JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \
1233 JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \
1234 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1235 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \
1236 JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \
1237 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1238 #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable()
1239#elif defined(JSON_HEDLEY_ASSUME)
1240 #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
1241#endif
1242#if !defined(JSON_HEDLEY_ASSUME)
1243 #if defined(JSON_HEDLEY_UNREACHABLE)
1244 #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1)))
1245 #else
1246 #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr)
1247 #endif
1248#endif
1249#if defined(JSON_HEDLEY_UNREACHABLE)
1250 #if \
1251 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
1252 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)
1253 #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value))
1254 #else
1255 #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE()
1256 #endif
1257#else
1258 #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value)
1259#endif
1260#if !defined(JSON_HEDLEY_UNREACHABLE)
1261 #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
1262#endif
1263
1265#if JSON_HEDLEY_HAS_WARNING("-Wpedantic")
1266 #pragma clang diagnostic ignored "-Wpedantic"
1267#endif
1268#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus)
1269 #pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
1270#endif
1271#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0)
1272 #if defined(__clang__)
1273 #pragma clang diagnostic ignored "-Wvariadic-macros"
1274 #elif defined(JSON_HEDLEY_GCC_VERSION)
1275 #pragma GCC diagnostic ignored "-Wvariadic-macros"
1276 #endif
1277#endif
1278#if defined(JSON_HEDLEY_NON_NULL)
1279 #undef JSON_HEDLEY_NON_NULL
1280#endif
1281#if \
1282 JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \
1283 JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
1284 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1285 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)
1286 #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__)))
1287#else
1288 #define JSON_HEDLEY_NON_NULL(...)
1289#endif
1291
1292#if defined(JSON_HEDLEY_PRINTF_FORMAT)
1293 #undef JSON_HEDLEY_PRINTF_FORMAT
1294#endif
1295#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO)
1296 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check)))
1297#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO)
1298 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check)))
1299#elif \
1300 JSON_HEDLEY_HAS_ATTRIBUTE(format) || \
1301 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1302 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1303 JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \
1304 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1305 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1306 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1307 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1308 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1309 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1310 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1311 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1312 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1313 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1314 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1315 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1316 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1317 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check)))
1318#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0)
1319 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check))
1320#else
1321 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check)
1322#endif
1323
1324#if defined(JSON_HEDLEY_CONSTEXPR)
1325 #undef JSON_HEDLEY_CONSTEXPR
1326#endif
1327#if defined(__cplusplus)
1328 #if __cplusplus >= 201103L
1329 #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr)
1330 #endif
1331#endif
1332#if !defined(JSON_HEDLEY_CONSTEXPR)
1333 #define JSON_HEDLEY_CONSTEXPR
1334#endif
1335
1336#if defined(JSON_HEDLEY_PREDICT)
1337 #undef JSON_HEDLEY_PREDICT
1338#endif
1339#if defined(JSON_HEDLEY_LIKELY)
1340 #undef JSON_HEDLEY_LIKELY
1341#endif
1342#if defined(JSON_HEDLEY_UNLIKELY)
1343 #undef JSON_HEDLEY_UNLIKELY
1344#endif
1345#if defined(JSON_HEDLEY_UNPREDICTABLE)
1346 #undef JSON_HEDLEY_UNPREDICTABLE
1347#endif
1348#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable)
1349 #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr))
1350#endif
1351#if \
1352 (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \
1353 JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \
1354 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1355# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability))
1356# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability))
1357# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability))
1358# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 )
1359# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 )
1360#elif \
1361 (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
1362 JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \
1363 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1364 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \
1365 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1366 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1367 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1368 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \
1369 JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \
1370 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \
1371 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
1372 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1373 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1374 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \
1375 JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
1376 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1377# define JSON_HEDLEY_PREDICT(expr, expected, probability) \
1378 (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)))
1379# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \
1380 (__extension__ ({ \
1381 double hedley_probability_ = (probability); \
1382 ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \
1383 }))
1384# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \
1385 (__extension__ ({ \
1386 double hedley_probability_ = (probability); \
1387 ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \
1388 }))
1389# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1)
1390# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
1391#else
1392# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))
1393# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr))
1394# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr))
1395# define JSON_HEDLEY_LIKELY(expr) (!!(expr))
1396# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr))
1397#endif
1398#if !defined(JSON_HEDLEY_UNPREDICTABLE)
1399 #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5)
1400#endif
1401
1402#if defined(JSON_HEDLEY_MALLOC)
1403 #undef JSON_HEDLEY_MALLOC
1404#endif
1405#if \
1406 JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \
1407 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1408 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1409 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1410 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1411 JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \
1412 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1413 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1414 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1415 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1416 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1417 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1418 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1419 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1420 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1421 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1422 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1423 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1424 #define JSON_HEDLEY_MALLOC __attribute__((__malloc__))
1425#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1426 #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory")
1427#elif \
1428 JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
1429 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1430 #define JSON_HEDLEY_MALLOC __declspec(restrict)
1431#else
1432 #define JSON_HEDLEY_MALLOC
1433#endif
1434
1435#if defined(JSON_HEDLEY_PURE)
1436 #undef JSON_HEDLEY_PURE
1437#endif
1438#if \
1439 JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \
1440 JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \
1441 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1442 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1443 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1444 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1445 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1446 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1447 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1448 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1449 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1450 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1451 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1452 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1453 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1454 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1455 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1456 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1457 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1458# define JSON_HEDLEY_PURE __attribute__((__pure__))
1459#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1460# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data")
1461#elif defined(__cplusplus) && \
1462 ( \
1463 JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \
1464 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \
1465 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \
1466 )
1467# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;")
1468#else
1469# define JSON_HEDLEY_PURE
1470#endif
1471
1472#if defined(JSON_HEDLEY_CONST)
1473 #undef JSON_HEDLEY_CONST
1474#endif
1475#if \
1476 JSON_HEDLEY_HAS_ATTRIBUTE(const) || \
1477 JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \
1478 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1479 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1480 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1481 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1482 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1483 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1484 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1485 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1486 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1487 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1488 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1489 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1490 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1491 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1492 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1493 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1494 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1495 #define JSON_HEDLEY_CONST __attribute__((__const__))
1496#elif \
1497 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1498 #define JSON_HEDLEY_CONST _Pragma("no_side_effect")
1499#else
1500 #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE
1501#endif
1502
1503#if defined(JSON_HEDLEY_RESTRICT)
1504 #undef JSON_HEDLEY_RESTRICT
1505#endif
1506#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus)
1507 #define JSON_HEDLEY_RESTRICT restrict
1508#elif \
1509 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1510 JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
1511 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1512 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
1513 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1514 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1515 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1516 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1517 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \
1518 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \
1519 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1520 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \
1521 JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \
1522 defined(__clang__) || \
1523 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1524 #define JSON_HEDLEY_RESTRICT __restrict
1525#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus)
1526 #define JSON_HEDLEY_RESTRICT _Restrict
1527#else
1528 #define JSON_HEDLEY_RESTRICT
1529#endif
1530
1531#if defined(JSON_HEDLEY_INLINE)
1532 #undef JSON_HEDLEY_INLINE
1533#endif
1534#if \
1535 (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
1536 (defined(__cplusplus) && (__cplusplus >= 199711L))
1537 #define JSON_HEDLEY_INLINE inline
1538#elif \
1539 defined(JSON_HEDLEY_GCC_VERSION) || \
1540 JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0)
1541 #define JSON_HEDLEY_INLINE __inline__
1542#elif \
1543 JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \
1544 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
1545 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1546 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \
1547 JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \
1548 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
1549 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \
1550 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1551 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1552 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1553 #define JSON_HEDLEY_INLINE __inline
1554#else
1555 #define JSON_HEDLEY_INLINE
1556#endif
1557
1558#if defined(JSON_HEDLEY_ALWAYS_INLINE)
1559 #undef JSON_HEDLEY_ALWAYS_INLINE
1560#endif
1561#if \
1562 JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \
1563 JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
1564 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1565 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1566 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1567 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1568 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1569 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1570 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1571 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1572 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1573 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1574 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1575 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1576 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1577 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1578 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1579 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
1580 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1581# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE
1582#elif \
1583 JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \
1584 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1585# define JSON_HEDLEY_ALWAYS_INLINE __forceinline
1586#elif defined(__cplusplus) && \
1587 ( \
1588 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1589 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1590 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1591 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
1592 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1593 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \
1594 )
1595# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
1596#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1597# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced")
1598#else
1599# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE
1600#endif
1601
1602#if defined(JSON_HEDLEY_NEVER_INLINE)
1603 #undef JSON_HEDLEY_NEVER_INLINE
1604#endif
1605#if \
1606 JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \
1607 JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
1608 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1609 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1610 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1611 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1612 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1613 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1614 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1615 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1616 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1617 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1618 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1619 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1620 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1621 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1622 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1623 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
1624 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1625 #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__))
1626#elif \
1627 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1628 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1629 #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
1630#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0)
1631 #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline")
1632#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)
1633 #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;")
1634#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1635 #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never")
1636#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)
1637 #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline))
1638#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)
1639 #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
1640#else
1641 #define JSON_HEDLEY_NEVER_INLINE
1642#endif
1643
1644#if defined(JSON_HEDLEY_PRIVATE)
1645 #undef JSON_HEDLEY_PRIVATE
1646#endif
1647#if defined(JSON_HEDLEY_PUBLIC)
1648 #undef JSON_HEDLEY_PUBLIC
1649#endif
1650#if defined(JSON_HEDLEY_IMPORT)
1651 #undef JSON_HEDLEY_IMPORT
1652#endif
1653#if defined(_WIN32) || defined(__CYGWIN__)
1654# define JSON_HEDLEY_PRIVATE
1655# define JSON_HEDLEY_PUBLIC __declspec(dllexport)
1656# define JSON_HEDLEY_IMPORT __declspec(dllimport)
1657#else
1658# if \
1659 JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \
1660 JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
1661 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1662 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1663 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1664 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
1665 ( \
1666 defined(__TI_EABI__) && \
1667 ( \
1668 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1669 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \
1670 ) \
1671 ) || \
1672 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1673# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden")))
1674# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default")))
1675# else
1676# define JSON_HEDLEY_PRIVATE
1677# define JSON_HEDLEY_PUBLIC
1678# endif
1679# define JSON_HEDLEY_IMPORT extern
1680#endif
1681
1682#if defined(JSON_HEDLEY_NO_THROW)
1683 #undef JSON_HEDLEY_NO_THROW
1684#endif
1685#if \
1686 JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \
1687 JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
1688 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1689 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1690 #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__))
1691#elif \
1692 JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \
1693 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
1694 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)
1695 #define JSON_HEDLEY_NO_THROW __declspec(nothrow)
1696#else
1697 #define JSON_HEDLEY_NO_THROW
1698#endif
1699
1700#if defined(JSON_HEDLEY_FALL_THROUGH)
1701 #undef JSON_HEDLEY_FALL_THROUGH
1702#endif
1703#if \
1704 JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \
1705 JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \
1706 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1707 #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__))
1708#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough)
1709 #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]])
1710#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough)
1711 #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]])
1712#elif defined(__fallthrough) /* SAL */
1713 #define JSON_HEDLEY_FALL_THROUGH __fallthrough
1714#else
1715 #define JSON_HEDLEY_FALL_THROUGH
1716#endif
1717
1718#if defined(JSON_HEDLEY_RETURNS_NON_NULL)
1719 #undef JSON_HEDLEY_RETURNS_NON_NULL
1720#endif
1721#if \
1722 JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \
1723 JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \
1724 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1725 #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__))
1726#elif defined(_Ret_notnull_) /* SAL */
1727 #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_
1728#else
1729 #define JSON_HEDLEY_RETURNS_NON_NULL
1730#endif
1731
1732#if defined(JSON_HEDLEY_ARRAY_PARAM)
1733 #undef JSON_HEDLEY_ARRAY_PARAM
1734#endif
1735#if \
1736 defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
1737 !defined(__STDC_NO_VLA__) && \
1738 !defined(__cplusplus) && \
1739 !defined(JSON_HEDLEY_PGI_VERSION) && \
1740 !defined(JSON_HEDLEY_TINYC_VERSION)
1741 #define JSON_HEDLEY_ARRAY_PARAM(name) (name)
1742#else
1743 #define JSON_HEDLEY_ARRAY_PARAM(name)
1744#endif
1745
1746#if defined(JSON_HEDLEY_IS_CONSTANT)
1747 #undef JSON_HEDLEY_IS_CONSTANT
1748#endif
1749#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR)
1750 #undef JSON_HEDLEY_REQUIRE_CONSTEXPR
1751#endif
1752/* JSON_HEDLEY_IS_CONSTEXPR_ is for
1753 HEDLEY INTERNAL USE ONLY. API subject to change without notice. */
1754#if defined(JSON_HEDLEY_IS_CONSTEXPR_)
1755 #undef JSON_HEDLEY_IS_CONSTEXPR_
1756#endif
1757#if \
1758 JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \
1759 JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
1760 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1761 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \
1762 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1763 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
1764 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
1765 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \
1766 JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
1767 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1768 #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr)
1769#endif
1770#if !defined(__cplusplus)
1771# if \
1772 JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \
1773 JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
1774 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1775 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
1776 JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
1777 JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \
1778 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24)
1779#if defined(__INTPTR_TYPE__)
1780 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*)
1781#else
1782 #include <stdint.h>
1783 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*)
1784#endif
1785# elif \
1786 ( \
1787 defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \
1788 !defined(JSON_HEDLEY_SUNPRO_VERSION) && \
1789 !defined(JSON_HEDLEY_PGI_VERSION) && \
1790 !defined(JSON_HEDLEY_IAR_VERSION)) || \
1791 (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
1792 JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \
1793 JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \
1794 JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \
1795 JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0)
1796#if defined(__INTPTR_TYPE__)
1797 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0)
1798#else
1799 #include <stdint.h>
1800 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0)
1801#endif
1802# elif \
1803 defined(JSON_HEDLEY_GCC_VERSION) || \
1804 defined(JSON_HEDLEY_INTEL_VERSION) || \
1805 defined(JSON_HEDLEY_TINYC_VERSION) || \
1806 defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \
1807 JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \
1808 defined(JSON_HEDLEY_TI_CL2000_VERSION) || \
1809 defined(JSON_HEDLEY_TI_CL6X_VERSION) || \
1810 defined(JSON_HEDLEY_TI_CL7X_VERSION) || \
1811 defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \
1812 defined(__clang__)
1813# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \
1814 sizeof(void) != \
1815 sizeof(*( \
1816 1 ? \
1817 ((void*) ((expr) * 0L) ) : \
1818((struct { char v[sizeof(void) * 2]; } *) 1) \
1819 ) \
1820 ) \
1821 )
1822# endif
1823#endif
1824#if defined(JSON_HEDLEY_IS_CONSTEXPR_)
1825 #if !defined(JSON_HEDLEY_IS_CONSTANT)
1826 #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr)
1827 #endif
1828 #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1))
1829#else
1830 #if !defined(JSON_HEDLEY_IS_CONSTANT)
1831 #define JSON_HEDLEY_IS_CONSTANT(expr) (0)
1832 #endif
1833 #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr)
1834#endif
1835
1836#if defined(JSON_HEDLEY_BEGIN_C_DECLS)
1837 #undef JSON_HEDLEY_BEGIN_C_DECLS
1838#endif
1839#if defined(JSON_HEDLEY_END_C_DECLS)
1840 #undef JSON_HEDLEY_END_C_DECLS
1841#endif
1842#if defined(JSON_HEDLEY_C_DECL)
1843 #undef JSON_HEDLEY_C_DECL
1844#endif
1845#if defined(__cplusplus)
1846 #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" {
1847 #define JSON_HEDLEY_END_C_DECLS }
1848 #define JSON_HEDLEY_C_DECL extern "C"
1849#else
1850 #define JSON_HEDLEY_BEGIN_C_DECLS
1851 #define JSON_HEDLEY_END_C_DECLS
1852 #define JSON_HEDLEY_C_DECL
1853#endif
1854
1855#if defined(JSON_HEDLEY_STATIC_ASSERT)
1856 #undef JSON_HEDLEY_STATIC_ASSERT
1857#endif
1858#if \
1859 !defined(__cplusplus) && ( \
1860 (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \
1861 (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
1862 JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \
1863 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1864 defined(_Static_assert) \
1865 )
1866# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message)
1867#elif \
1868 (defined(__cplusplus) && (__cplusplus >= 201103L)) || \
1869 JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \
1870 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1871# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message))
1872#else
1873# define JSON_HEDLEY_STATIC_ASSERT(expr, message)
1874#endif
1875
1876#if defined(JSON_HEDLEY_NULL)
1877 #undef JSON_HEDLEY_NULL
1878#endif
1879#if defined(__cplusplus)
1880 #if __cplusplus >= 201103L
1881 #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr)
1882 #elif defined(NULL)
1883 #define JSON_HEDLEY_NULL NULL
1884 #else
1885 #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0)
1886 #endif
1887#elif defined(NULL)
1888 #define JSON_HEDLEY_NULL NULL
1889#else
1890 #define JSON_HEDLEY_NULL ((void*) 0)
1891#endif
1892
1893#if defined(JSON_HEDLEY_MESSAGE)
1894 #undef JSON_HEDLEY_MESSAGE
1895#endif
1896#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
1897# define JSON_HEDLEY_MESSAGE(msg) \
1898 JSON_HEDLEY_DIAGNOSTIC_PUSH \
1899 JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
1900 JSON_HEDLEY_PRAGMA(message msg) \
1901 JSON_HEDLEY_DIAGNOSTIC_POP
1902#elif \
1903 JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \
1904 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
1905# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg)
1906#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0)
1907# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg)
1908#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1909# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))
1910#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0)
1911# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))
1912#else
1913# define JSON_HEDLEY_MESSAGE(msg)
1914#endif
1915
1916#if defined(JSON_HEDLEY_WARNING)
1917 #undef JSON_HEDLEY_WARNING
1918#endif
1919#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
1920# define JSON_HEDLEY_WARNING(msg) \
1921 JSON_HEDLEY_DIAGNOSTIC_PUSH \
1922 JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
1923 JSON_HEDLEY_PRAGMA(clang warning msg) \
1924 JSON_HEDLEY_DIAGNOSTIC_POP
1925#elif \
1926 JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \
1927 JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \
1928 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
1929# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg)
1930#elif \
1931 JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \
1932 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1933# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg))
1934#else
1935# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg)
1936#endif
1937
1938#if defined(JSON_HEDLEY_REQUIRE)
1939 #undef JSON_HEDLEY_REQUIRE
1940#endif
1941#if defined(JSON_HEDLEY_REQUIRE_MSG)
1942 #undef JSON_HEDLEY_REQUIRE_MSG
1943#endif
1944#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if)
1945# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat")
1946# define JSON_HEDLEY_REQUIRE(expr) \
1947 JSON_HEDLEY_DIAGNOSTIC_PUSH \
1948 _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
1949 __attribute__((diagnose_if(!(expr), #expr, "error"))) \
1950 JSON_HEDLEY_DIAGNOSTIC_POP
1951# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \
1952 JSON_HEDLEY_DIAGNOSTIC_PUSH \
1953 _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
1954 __attribute__((diagnose_if(!(expr), msg, "error"))) \
1955 JSON_HEDLEY_DIAGNOSTIC_POP
1956# else
1957# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error")))
1958# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error")))
1959# endif
1960#else
1961# define JSON_HEDLEY_REQUIRE(expr)
1962# define JSON_HEDLEY_REQUIRE_MSG(expr,msg)
1963#endif
1964
1965#if defined(JSON_HEDLEY_FLAGS)
1966 #undef JSON_HEDLEY_FLAGS
1967#endif
1968#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion"))
1969 #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__))
1970#else
1971 #define JSON_HEDLEY_FLAGS
1972#endif
1973
1974#if defined(JSON_HEDLEY_FLAGS_CAST)
1975 #undef JSON_HEDLEY_FLAGS_CAST
1976#endif
1977#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0)
1978# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \
1979 JSON_HEDLEY_DIAGNOSTIC_PUSH \
1980 _Pragma("warning(disable:188)") \
1981 ((T) (expr)); \
1982 JSON_HEDLEY_DIAGNOSTIC_POP \
1983 }))
1984#else
1985# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr)
1986#endif
1987
1988#if defined(JSON_HEDLEY_EMPTY_BASES)
1989 #undef JSON_HEDLEY_EMPTY_BASES
1990#endif
1991#if \
1992 (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \
1993 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1994 #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases)
1995#else
1996 #define JSON_HEDLEY_EMPTY_BASES
1997#endif
1998
1999/* Remaining macros are deprecated. */
2000
2001#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK)
2002 #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK
2003#endif
2004#if defined(__clang__)
2005 #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0)
2006#else
2007 #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
2008#endif
2009
2010#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE)
2011 #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE
2012#endif
2013#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
2014
2015#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE)
2016 #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE
2017#endif
2018#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute)
2019
2020#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN)
2021 #undef JSON_HEDLEY_CLANG_HAS_BUILTIN
2022#endif
2023#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin)
2024
2025#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE)
2026 #undef JSON_HEDLEY_CLANG_HAS_FEATURE
2027#endif
2028#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature)
2029
2030#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION)
2031 #undef JSON_HEDLEY_CLANG_HAS_EXTENSION
2032#endif
2033#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension)
2034
2035#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE)
2036 #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE
2037#endif
2038#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute)
2039
2040#if defined(JSON_HEDLEY_CLANG_HAS_WARNING)
2041 #undef JSON_HEDLEY_CLANG_HAS_WARNING
2042#endif
2043#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning)
2044
2045#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */
#define JSON_HEDLEY_DIAGNOSTIC_PUSH
Definition: hedley.h:784
#define JSON_HEDLEY_DIAGNOSTIC_POP
Definition: hedley.h:785