39 #ifndef INCLUDE_NLOHMANN_JSON_HPP_
40 #define INCLUDE_NLOHMANN_JSON_HPP_
42 #ifndef JSON_SKIP_LIBRARY_VERSION_CHECK
43 #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH)
44 #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 10 || NLOHMANN_JSON_VERSION_PATCH != 5
45 #warning "Already included a different version of the library!"
50 #define NLOHMANN_JSON_VERSION_MAJOR 3
51 #define NLOHMANN_JSON_VERSION_MINOR 10
52 #define NLOHMANN_JSON_VERSION_PATCH 5
57 #include <initializer_list>
71 #include <type_traits>
79 #include <forward_list>
84 #include <type_traits>
85 #include <unordered_map>
125 #if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15)
126 #if defined(JSON_HEDLEY_VERSION)
127 #undef JSON_HEDLEY_VERSION
129 #define JSON_HEDLEY_VERSION 15
131 #if defined(JSON_HEDLEY_STRINGIFY_EX)
132 #undef JSON_HEDLEY_STRINGIFY_EX
134 #define JSON_HEDLEY_STRINGIFY_EX(x) #x
136 #if defined(JSON_HEDLEY_STRINGIFY)
137 #undef JSON_HEDLEY_STRINGIFY
139 #define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x)
141 #if defined(JSON_HEDLEY_CONCAT_EX)
142 #undef JSON_HEDLEY_CONCAT_EX
144 #define JSON_HEDLEY_CONCAT_EX(a,b) a##b
146 #if defined(JSON_HEDLEY_CONCAT)
147 #undef JSON_HEDLEY_CONCAT
149 #define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b)
151 #if defined(JSON_HEDLEY_CONCAT3_EX)
152 #undef JSON_HEDLEY_CONCAT3_EX
154 #define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c
156 #if defined(JSON_HEDLEY_CONCAT3)
157 #undef JSON_HEDLEY_CONCAT3
159 #define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c)
161 #if defined(JSON_HEDLEY_VERSION_ENCODE)
162 #undef JSON_HEDLEY_VERSION_ENCODE
164 #define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision))
166 #if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR)
167 #undef JSON_HEDLEY_VERSION_DECODE_MAJOR
169 #define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000)
171 #if defined(JSON_HEDLEY_VERSION_DECODE_MINOR)
172 #undef JSON_HEDLEY_VERSION_DECODE_MINOR
174 #define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000)
176 #if defined(JSON_HEDLEY_VERSION_DECODE_REVISION)
177 #undef JSON_HEDLEY_VERSION_DECODE_REVISION
179 #define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000)
181 #if defined(JSON_HEDLEY_GNUC_VERSION)
182 #undef JSON_HEDLEY_GNUC_VERSION
184 #if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
185 #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
186 #elif defined(__GNUC__)
187 #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0)
190 #if defined(JSON_HEDLEY_GNUC_VERSION_CHECK)
191 #undef JSON_HEDLEY_GNUC_VERSION_CHECK
193 #if defined(JSON_HEDLEY_GNUC_VERSION)
194 #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
196 #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0)
199 #if defined(JSON_HEDLEY_MSVC_VERSION)
200 #undef JSON_HEDLEY_MSVC_VERSION
202 #if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL)
203 #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100)
204 #elif defined(_MSC_FULL_VER) && !defined(__ICL)
205 #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10)
206 #elif defined(_MSC_VER) && !defined(__ICL)
207 #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0)
210 #if defined(JSON_HEDLEY_MSVC_VERSION_CHECK)
211 #undef JSON_HEDLEY_MSVC_VERSION_CHECK
213 #if !defined(JSON_HEDLEY_MSVC_VERSION)
214 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0)
215 #elif defined(_MSC_VER) && (_MSC_VER >= 1400)
216 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
217 #elif defined(_MSC_VER) && (_MSC_VER >= 1200)
218 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
220 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor)))
223 #if defined(JSON_HEDLEY_INTEL_VERSION)
224 #undef JSON_HEDLEY_INTEL_VERSION
226 #if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL)
227 #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE)
228 #elif defined(__INTEL_COMPILER) && !defined(__ICL)
229 #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
232 #if defined(JSON_HEDLEY_INTEL_VERSION_CHECK)
233 #undef JSON_HEDLEY_INTEL_VERSION_CHECK
235 #if defined(JSON_HEDLEY_INTEL_VERSION)
236 #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
238 #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0)
241 #if defined(JSON_HEDLEY_INTEL_CL_VERSION)
242 #undef JSON_HEDLEY_INTEL_CL_VERSION
244 #if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL)
245 #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0)
248 #if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK)
249 #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK
251 #if defined(JSON_HEDLEY_INTEL_CL_VERSION)
252 #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
254 #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0)
257 #if defined(JSON_HEDLEY_PGI_VERSION)
258 #undef JSON_HEDLEY_PGI_VERSION
260 #if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)
261 #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)
264 #if defined(JSON_HEDLEY_PGI_VERSION_CHECK)
265 #undef JSON_HEDLEY_PGI_VERSION_CHECK
267 #if defined(JSON_HEDLEY_PGI_VERSION)
268 #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
270 #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0)
273 #if defined(JSON_HEDLEY_SUNPRO_VERSION)
274 #undef JSON_HEDLEY_SUNPRO_VERSION
276 #if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
277 #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)
278 #elif defined(__SUNPRO_C)
279 #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf)
280 #elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
281 #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)
282 #elif defined(__SUNPRO_CC)
283 #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf)
286 #if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK)
287 #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK
289 #if defined(JSON_HEDLEY_SUNPRO_VERSION)
290 #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
292 #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0)
295 #if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)
296 #undef JSON_HEDLEY_EMSCRIPTEN_VERSION
298 #if defined(__EMSCRIPTEN__)
299 #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__)
302 #if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK)
303 #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK
305 #if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)
306 #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
308 #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0)
311 #if defined(JSON_HEDLEY_ARM_VERSION)
312 #undef JSON_HEDLEY_ARM_VERSION
314 #if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
315 #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100)
316 #elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
317 #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100)
320 #if defined(JSON_HEDLEY_ARM_VERSION_CHECK)
321 #undef JSON_HEDLEY_ARM_VERSION_CHECK
323 #if defined(JSON_HEDLEY_ARM_VERSION)
324 #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
326 #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0)
329 #if defined(JSON_HEDLEY_IBM_VERSION)
330 #undef JSON_HEDLEY_IBM_VERSION
332 #if defined(__ibmxl__)
333 #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__)
334 #elif defined(__xlC__) && defined(__xlC_ver__)
335 #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)
336 #elif defined(__xlC__)
337 #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0)
340 #if defined(JSON_HEDLEY_IBM_VERSION_CHECK)
341 #undef JSON_HEDLEY_IBM_VERSION_CHECK
343 #if defined(JSON_HEDLEY_IBM_VERSION)
344 #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
346 #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0)
349 #if defined(JSON_HEDLEY_TI_VERSION)
350 #undef JSON_HEDLEY_TI_VERSION
353 defined(__TI_COMPILER_VERSION__) && \
355 defined(__TMS470__) || defined(__TI_ARM__) || \
356 defined(__MSP430__) || \
357 defined(__TMS320C2000__) \
359 #if (__TI_COMPILER_VERSION__ >= 16000000)
360 #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
364 #if defined(JSON_HEDLEY_TI_VERSION_CHECK)
365 #undef JSON_HEDLEY_TI_VERSION_CHECK
367 #if defined(JSON_HEDLEY_TI_VERSION)
368 #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
370 #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0)
373 #if defined(JSON_HEDLEY_TI_CL2000_VERSION)
374 #undef JSON_HEDLEY_TI_CL2000_VERSION
376 #if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__)
377 #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
380 #if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK)
381 #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK
383 #if defined(JSON_HEDLEY_TI_CL2000_VERSION)
384 #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
386 #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0)
389 #if defined(JSON_HEDLEY_TI_CL430_VERSION)
390 #undef JSON_HEDLEY_TI_CL430_VERSION
392 #if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__)
393 #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
396 #if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK)
397 #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK
399 #if defined(JSON_HEDLEY_TI_CL430_VERSION)
400 #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
402 #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0)
405 #if defined(JSON_HEDLEY_TI_ARMCL_VERSION)
406 #undef JSON_HEDLEY_TI_ARMCL_VERSION
408 #if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__))
409 #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
412 #if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK)
413 #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK
415 #if defined(JSON_HEDLEY_TI_ARMCL_VERSION)
416 #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
418 #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0)
421 #if defined(JSON_HEDLEY_TI_CL6X_VERSION)
422 #undef JSON_HEDLEY_TI_CL6X_VERSION
424 #if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__)
425 #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
428 #if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK)
429 #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK
431 #if defined(JSON_HEDLEY_TI_CL6X_VERSION)
432 #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
434 #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0)
437 #if defined(JSON_HEDLEY_TI_CL7X_VERSION)
438 #undef JSON_HEDLEY_TI_CL7X_VERSION
440 #if defined(__TI_COMPILER_VERSION__) && defined(__C7000__)
441 #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
444 #if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK)
445 #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK
447 #if defined(JSON_HEDLEY_TI_CL7X_VERSION)
448 #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
450 #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0)
453 #if defined(JSON_HEDLEY_TI_CLPRU_VERSION)
454 #undef JSON_HEDLEY_TI_CLPRU_VERSION
456 #if defined(__TI_COMPILER_VERSION__) && defined(__PRU__)
457 #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
460 #if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK)
461 #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK
463 #if defined(JSON_HEDLEY_TI_CLPRU_VERSION)
464 #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
466 #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0)
469 #if defined(JSON_HEDLEY_CRAY_VERSION)
470 #undef JSON_HEDLEY_CRAY_VERSION
473 #if defined(_RELEASE_PATCHLEVEL)
474 #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL)
476 #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0)
480 #if defined(JSON_HEDLEY_CRAY_VERSION_CHECK)
481 #undef JSON_HEDLEY_CRAY_VERSION_CHECK
483 #if defined(JSON_HEDLEY_CRAY_VERSION)
484 #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
486 #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0)
489 #if defined(JSON_HEDLEY_IAR_VERSION)
490 #undef JSON_HEDLEY_IAR_VERSION
492 #if defined(__IAR_SYSTEMS_ICC__)
494 #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000))
496 #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0)
500 #if defined(JSON_HEDLEY_IAR_VERSION_CHECK)
501 #undef JSON_HEDLEY_IAR_VERSION_CHECK
503 #if defined(JSON_HEDLEY_IAR_VERSION)
504 #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
506 #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0)
509 #if defined(JSON_HEDLEY_TINYC_VERSION)
510 #undef JSON_HEDLEY_TINYC_VERSION
512 #if defined(__TINYC__)
513 #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)
516 #if defined(JSON_HEDLEY_TINYC_VERSION_CHECK)
517 #undef JSON_HEDLEY_TINYC_VERSION_CHECK
519 #if defined(JSON_HEDLEY_TINYC_VERSION)
520 #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
522 #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0)
525 #if defined(JSON_HEDLEY_DMC_VERSION)
526 #undef JSON_HEDLEY_DMC_VERSION
529 #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf)
532 #if defined(JSON_HEDLEY_DMC_VERSION_CHECK)
533 #undef JSON_HEDLEY_DMC_VERSION_CHECK
535 #if defined(JSON_HEDLEY_DMC_VERSION)
536 #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
538 #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0)
541 #if defined(JSON_HEDLEY_COMPCERT_VERSION)
542 #undef JSON_HEDLEY_COMPCERT_VERSION
544 #if defined(__COMPCERT_VERSION__)
545 #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100)
548 #if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK)
549 #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK
551 #if defined(JSON_HEDLEY_COMPCERT_VERSION)
552 #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
554 #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0)
557 #if defined(JSON_HEDLEY_PELLES_VERSION)
558 #undef JSON_HEDLEY_PELLES_VERSION
560 #if defined(__POCC__)
561 #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0)
564 #if defined(JSON_HEDLEY_PELLES_VERSION_CHECK)
565 #undef JSON_HEDLEY_PELLES_VERSION_CHECK
567 #if defined(JSON_HEDLEY_PELLES_VERSION)
568 #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
570 #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0)
573 #if defined(JSON_HEDLEY_MCST_LCC_VERSION)
574 #undef JSON_HEDLEY_MCST_LCC_VERSION
576 #if defined(__LCC__) && defined(__LCC_MINOR__)
577 #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__)
580 #if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK)
581 #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK
583 #if defined(JSON_HEDLEY_MCST_LCC_VERSION)
584 #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
586 #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0)
589 #if defined(JSON_HEDLEY_GCC_VERSION)
590 #undef JSON_HEDLEY_GCC_VERSION
593 defined(JSON_HEDLEY_GNUC_VERSION) && \
594 !defined(__clang__) && \
595 !defined(JSON_HEDLEY_INTEL_VERSION) && \
596 !defined(JSON_HEDLEY_PGI_VERSION) && \
597 !defined(JSON_HEDLEY_ARM_VERSION) && \
598 !defined(JSON_HEDLEY_CRAY_VERSION) && \
599 !defined(JSON_HEDLEY_TI_VERSION) && \
600 !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \
601 !defined(JSON_HEDLEY_TI_CL430_VERSION) && \
602 !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \
603 !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \
604 !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \
605 !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \
606 !defined(__COMPCERT__) && \
607 !defined(JSON_HEDLEY_MCST_LCC_VERSION)
608 #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION
611 #if defined(JSON_HEDLEY_GCC_VERSION_CHECK)
612 #undef JSON_HEDLEY_GCC_VERSION_CHECK
614 #if defined(JSON_HEDLEY_GCC_VERSION)
615 #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
617 #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0)
620 #if defined(JSON_HEDLEY_HAS_ATTRIBUTE)
621 #undef JSON_HEDLEY_HAS_ATTRIBUTE
624 defined(__has_attribute) && \
626 (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \
628 # define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute)
630 # define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0)
633 #if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE)
634 #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE
636 #if defined(__has_attribute)
637 #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
639 #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
642 #if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE)
643 #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE
645 #if defined(__has_attribute)
646 #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
648 #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
651 #if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE)
652 #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE
655 defined(__has_cpp_attribute) && \
656 defined(__cplusplus) && \
657 (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0))
658 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute)
660 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0)
663 #if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS)
664 #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS
666 #if !defined(__cplusplus) || !defined(__has_cpp_attribute)
667 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)
669 !defined(JSON_HEDLEY_PGI_VERSION) && \
670 !defined(JSON_HEDLEY_IAR_VERSION) && \
671 (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \
672 (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0))
673 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute)
675 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)
678 #if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE)
679 #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE
681 #if defined(__has_cpp_attribute) && defined(__cplusplus)
682 #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)
684 #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
687 #if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE)
688 #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE
690 #if defined(__has_cpp_attribute) && defined(__cplusplus)
691 #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)
693 #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
696 #if defined(JSON_HEDLEY_HAS_BUILTIN)
697 #undef JSON_HEDLEY_HAS_BUILTIN
699 #if defined(__has_builtin)
700 #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin)
702 #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0)
705 #if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN)
706 #undef JSON_HEDLEY_GNUC_HAS_BUILTIN
708 #if defined(__has_builtin)
709 #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)
711 #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
714 #if defined(JSON_HEDLEY_GCC_HAS_BUILTIN)
715 #undef JSON_HEDLEY_GCC_HAS_BUILTIN
717 #if defined(__has_builtin)
718 #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)
720 #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
723 #if defined(JSON_HEDLEY_HAS_FEATURE)
724 #undef JSON_HEDLEY_HAS_FEATURE
726 #if defined(__has_feature)
727 #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature)
729 #define JSON_HEDLEY_HAS_FEATURE(feature) (0)
732 #if defined(JSON_HEDLEY_GNUC_HAS_FEATURE)
733 #undef JSON_HEDLEY_GNUC_HAS_FEATURE
735 #if defined(__has_feature)
736 #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)
738 #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
741 #if defined(JSON_HEDLEY_GCC_HAS_FEATURE)
742 #undef JSON_HEDLEY_GCC_HAS_FEATURE
744 #if defined(__has_feature)
745 #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)
747 #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
750 #if defined(JSON_HEDLEY_HAS_EXTENSION)
751 #undef JSON_HEDLEY_HAS_EXTENSION
753 #if defined(__has_extension)
754 #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension)
756 #define JSON_HEDLEY_HAS_EXTENSION(extension) (0)
759 #if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION)
760 #undef JSON_HEDLEY_GNUC_HAS_EXTENSION
762 #if defined(__has_extension)
763 #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)
765 #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
768 #if defined(JSON_HEDLEY_GCC_HAS_EXTENSION)
769 #undef JSON_HEDLEY_GCC_HAS_EXTENSION
771 #if defined(__has_extension)
772 #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)
774 #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
777 #if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE)
778 #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE
780 #if defined(__has_declspec_attribute)
781 #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute)
783 #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0)
786 #if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE)
787 #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE
789 #if defined(__has_declspec_attribute)
790 #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)
792 #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
795 #if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE)
796 #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE
798 #if defined(__has_declspec_attribute)
799 #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)
801 #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
804 #if defined(JSON_HEDLEY_HAS_WARNING)
805 #undef JSON_HEDLEY_HAS_WARNING
807 #if defined(__has_warning)
808 #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning)
810 #define JSON_HEDLEY_HAS_WARNING(warning) (0)
813 #if defined(JSON_HEDLEY_GNUC_HAS_WARNING)
814 #undef JSON_HEDLEY_GNUC_HAS_WARNING
816 #if defined(__has_warning)
817 #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)
819 #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
822 #if defined(JSON_HEDLEY_GCC_HAS_WARNING)
823 #undef JSON_HEDLEY_GCC_HAS_WARNING
825 #if defined(__has_warning)
826 #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)
828 #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
832 (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
833 defined(__clang__) || \
834 JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \
835 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
836 JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \
837 JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \
838 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
839 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
840 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \
841 JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \
842 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \
843 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \
844 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
845 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
846 JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \
847 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \
848 JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \
849 (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR))
850 #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value)
851 #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
852 #define JSON_HEDLEY_PRAGMA(value) __pragma(value)
854 #define JSON_HEDLEY_PRAGMA(value)
857 #if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH)
858 #undef JSON_HEDLEY_DIAGNOSTIC_PUSH
860 #if defined(JSON_HEDLEY_DIAGNOSTIC_POP)
861 #undef JSON_HEDLEY_DIAGNOSTIC_POP
863 #if defined(__clang__)
864 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push")
865 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop")
866 #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
867 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
868 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
869 #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)
870 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
871 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
873 JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \
874 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
875 #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push))
876 #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop))
877 #elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0)
878 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push")
879 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop")
881 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
882 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
883 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \
884 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \
885 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
886 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)
887 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push")
888 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop")
889 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)
890 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
891 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
893 #define JSON_HEDLEY_DIAGNOSTIC_PUSH
894 #define JSON_HEDLEY_DIAGNOSTIC_POP
899 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)
900 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_
902 #if defined(__cplusplus)
903 # if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat")
904 # if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions")
905 # if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions")
906 # define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
907 JSON_HEDLEY_DIAGNOSTIC_PUSH \
908 _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
909 _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
910 _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \
912 JSON_HEDLEY_DIAGNOSTIC_POP
914 # define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
915 JSON_HEDLEY_DIAGNOSTIC_PUSH \
916 _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
917 _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
919 JSON_HEDLEY_DIAGNOSTIC_POP
922 # define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
923 JSON_HEDLEY_DIAGNOSTIC_PUSH \
924 _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
926 JSON_HEDLEY_DIAGNOSTIC_POP
930 #if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)
931 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x
934 #if defined(JSON_HEDLEY_CONST_CAST)
935 #undef JSON_HEDLEY_CONST_CAST
937 #if defined(__cplusplus)
938 # define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast<T>(expr))
940 JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \
941 JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \
942 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
943 # define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \
944 JSON_HEDLEY_DIAGNOSTIC_PUSH \
945 JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \
947 JSON_HEDLEY_DIAGNOSTIC_POP \
950 # define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr))
953 #if defined(JSON_HEDLEY_REINTERPRET_CAST)
954 #undef JSON_HEDLEY_REINTERPRET_CAST
956 #if defined(__cplusplus)
957 #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast<T>(expr))
959 #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr))
962 #if defined(JSON_HEDLEY_STATIC_CAST)
963 #undef JSON_HEDLEY_STATIC_CAST
965 #if defined(__cplusplus)
966 #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast<T>(expr))
968 #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr))
971 #if defined(JSON_HEDLEY_CPP_CAST)
972 #undef JSON_HEDLEY_CPP_CAST
974 #if defined(__cplusplus)
975 # if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast")
976 # define JSON_HEDLEY_CPP_CAST(T, expr) \
977 JSON_HEDLEY_DIAGNOSTIC_PUSH \
978 _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \
980 JSON_HEDLEY_DIAGNOSTIC_POP
981 # elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0)
982 # define JSON_HEDLEY_CPP_CAST(T, expr) \
983 JSON_HEDLEY_DIAGNOSTIC_PUSH \
984 _Pragma("diag_suppress=Pe137") \
985 JSON_HEDLEY_DIAGNOSTIC_POP
987 # define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr))
990 # define JSON_HEDLEY_CPP_CAST(T, expr) (expr)
993 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED)
994 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
996 #if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations")
997 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
998 #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
999 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)")
1000 #elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1001 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786))
1002 #elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)
1003 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445")
1004 #elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
1005 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
1006 #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)
1007 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
1008 #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
1009 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996))
1010 #elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1011 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
1013 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1014 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1015 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1016 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1017 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1018 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1019 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1020 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1021 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1022 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1023 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)
1024 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718")
1025 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus)
1026 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)")
1027 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus)
1028 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)")
1029 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1030 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215")
1031 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)
1032 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)")
1034 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
1037 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS)
1038 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
1040 #if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
1041 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
1042 #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
1043 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
1044 #elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1045 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161))
1046 #elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
1047 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
1048 #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)
1049 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
1050 #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
1051 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
1053 JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \
1054 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \
1055 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1056 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0)
1057 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
1058 #elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0)
1059 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
1060 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1061 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
1062 #elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1063 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161")
1065 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
1068 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES)
1069 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
1071 #if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes")
1072 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"")
1073 #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)
1074 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
1075 #elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0)
1076 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)")
1077 #elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1078 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292))
1079 #elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0)
1080 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030))
1081 #elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)
1082 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098")
1083 #elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
1084 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
1085 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)
1086 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)")
1088 JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \
1089 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \
1090 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0)
1091 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173")
1092 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1093 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097")
1094 #elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1095 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
1097 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
1100 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL)
1101 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
1103 #if JSON_HEDLEY_HAS_WARNING("-Wcast-qual")
1104 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"")
1105 #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
1106 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)")
1107 #elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0)
1108 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"")
1110 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
1113 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION)
1114 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
1116 #if JSON_HEDLEY_HAS_WARNING("-Wunused-function")
1117 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"")
1118 #elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0)
1119 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"")
1120 #elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0)
1121 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505))
1122 #elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1123 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142")
1125 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
1128 #if defined(JSON_HEDLEY_DEPRECATED)
1129 #undef JSON_HEDLEY_DEPRECATED
1131 #if defined(JSON_HEDLEY_DEPRECATED_FOR)
1132 #undef JSON_HEDLEY_DEPRECATED_FOR
1135 JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
1136 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1137 #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since))
1138 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement))
1140 (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
1141 JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \
1142 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1143 JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \
1144 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \
1145 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1146 JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \
1147 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \
1148 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \
1149 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1150 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \
1151 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1152 #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since)))
1153 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement)))
1154 #elif defined(__cplusplus) && (__cplusplus >= 201402L)
1155 #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]])
1156 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]])
1158 JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \
1159 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1160 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1161 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1162 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1163 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1164 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1165 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1166 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1167 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1168 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1169 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1170 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1171 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1172 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
1173 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1174 #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__))
1175 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__))
1177 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1178 JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \
1179 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1180 #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated)
1181 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated)
1182 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1183 #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated")
1184 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated")
1186 #define JSON_HEDLEY_DEPRECATED(since)
1187 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement)
1190 #if defined(JSON_HEDLEY_UNAVAILABLE)
1191 #undef JSON_HEDLEY_UNAVAILABLE
1194 JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \
1195 JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \
1196 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1197 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1198 #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since)))
1200 #define JSON_HEDLEY_UNAVAILABLE(available_since)
1203 #if defined(JSON_HEDLEY_WARN_UNUSED_RESULT)
1204 #undef JSON_HEDLEY_WARN_UNUSED_RESULT
1206 #if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG)
1207 #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG
1210 JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \
1211 JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
1212 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1213 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1214 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1215 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1216 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1217 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1218 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1219 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1220 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1221 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1222 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1223 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1224 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \
1225 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1226 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1227 #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
1228 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__))
1229 #elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L)
1230 #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
1231 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]])
1232 #elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard)
1233 #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
1234 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
1235 #elif defined(_Check_return_)
1236 #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_
1237 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_
1239 #define JSON_HEDLEY_WARN_UNUSED_RESULT
1240 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg)
1243 #if defined(JSON_HEDLEY_SENTINEL)
1244 #undef JSON_HEDLEY_SENTINEL
1247 JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \
1248 JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
1249 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1250 JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \
1251 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1252 #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position)))
1254 #define JSON_HEDLEY_SENTINEL(position)
1257 #if defined(JSON_HEDLEY_NO_RETURN)
1258 #undef JSON_HEDLEY_NO_RETURN
1260 #if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1261 #define JSON_HEDLEY_NO_RETURN __noreturn
1263 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1264 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1265 #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
1266 #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
1267 #define JSON_HEDLEY_NO_RETURN _Noreturn
1268 #elif defined(__cplusplus) && (__cplusplus >= 201103L)
1269 #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]])
1271 JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \
1272 JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \
1273 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1274 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1275 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1276 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1277 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1278 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1279 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1280 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1281 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1282 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1283 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1284 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1285 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1286 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1287 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1288 #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
1289 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1290 #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return")
1292 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1293 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1294 #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
1295 #elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)
1296 #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;")
1297 #elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)
1298 #define JSON_HEDLEY_NO_RETURN __attribute((noreturn))
1299 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)
1300 #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
1302 #define JSON_HEDLEY_NO_RETURN
1305 #if defined(JSON_HEDLEY_NO_ESCAPE)
1306 #undef JSON_HEDLEY_NO_ESCAPE
1308 #if JSON_HEDLEY_HAS_ATTRIBUTE(noescape)
1309 #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__))
1311 #define JSON_HEDLEY_NO_ESCAPE
1314 #if defined(JSON_HEDLEY_UNREACHABLE)
1315 #undef JSON_HEDLEY_UNREACHABLE
1317 #if defined(JSON_HEDLEY_UNREACHABLE_RETURN)
1318 #undef JSON_HEDLEY_UNREACHABLE_RETURN
1320 #if defined(JSON_HEDLEY_ASSUME)
1321 #undef JSON_HEDLEY_ASSUME
1324 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1325 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1326 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1327 #define JSON_HEDLEY_ASSUME(expr) __assume(expr)
1328 #elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume)
1329 #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr)
1331 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
1332 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)
1333 #if defined(__cplusplus)
1334 #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr)
1336 #define JSON_HEDLEY_ASSUME(expr) _nassert(expr)
1340 (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \
1341 JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \
1342 JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \
1343 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1344 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \
1345 JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \
1346 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1347 #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable()
1348 #elif defined(JSON_HEDLEY_ASSUME)
1349 #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
1351 #if !defined(JSON_HEDLEY_ASSUME)
1352 #if defined(JSON_HEDLEY_UNREACHABLE)
1353 #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1)))
1355 #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr)
1358 #if defined(JSON_HEDLEY_UNREACHABLE)
1360 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
1361 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)
1362 #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value))
1364 #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE()
1367 #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value)
1369 #if !defined(JSON_HEDLEY_UNREACHABLE)
1370 #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
1374 #if JSON_HEDLEY_HAS_WARNING("-Wpedantic")
1375 #pragma clang diagnostic ignored "-Wpedantic"
1377 #if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus)
1378 #pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
1380 #if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0)
1381 #if defined(__clang__)
1382 #pragma clang diagnostic ignored "-Wvariadic-macros"
1383 #elif defined(JSON_HEDLEY_GCC_VERSION)
1384 #pragma GCC diagnostic ignored "-Wvariadic-macros"
1387 #if defined(JSON_HEDLEY_NON_NULL)
1388 #undef JSON_HEDLEY_NON_NULL
1391 JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \
1392 JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
1393 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1394 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)
1395 #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__)))
1397 #define JSON_HEDLEY_NON_NULL(...)
1401 #if defined(JSON_HEDLEY_PRINTF_FORMAT)
1402 #undef JSON_HEDLEY_PRINTF_FORMAT
1404 #if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO)
1405 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check)))
1406 #elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO)
1407 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check)))
1409 JSON_HEDLEY_HAS_ATTRIBUTE(format) || \
1410 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1411 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1412 JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \
1413 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1414 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1415 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1416 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1417 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1418 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1419 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1420 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1421 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1422 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1423 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1424 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1425 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1426 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check)))
1427 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0)
1428 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check))
1430 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check)
1433 #if defined(JSON_HEDLEY_CONSTEXPR)
1434 #undef JSON_HEDLEY_CONSTEXPR
1436 #if defined(__cplusplus)
1437 #if __cplusplus >= 201103L
1438 #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr)
1441 #if !defined(JSON_HEDLEY_CONSTEXPR)
1442 #define JSON_HEDLEY_CONSTEXPR
1445 #if defined(JSON_HEDLEY_PREDICT)
1446 #undef JSON_HEDLEY_PREDICT
1448 #if defined(JSON_HEDLEY_LIKELY)
1449 #undef JSON_HEDLEY_LIKELY
1451 #if defined(JSON_HEDLEY_UNLIKELY)
1452 #undef JSON_HEDLEY_UNLIKELY
1454 #if defined(JSON_HEDLEY_UNPREDICTABLE)
1455 #undef JSON_HEDLEY_UNPREDICTABLE
1457 #if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable)
1458 #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr))
1461 (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \
1462 JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \
1463 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1464 # define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability))
1465 # define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability))
1466 # define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability))
1467 # define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 )
1468 # define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 )
1470 (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
1471 JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \
1472 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1473 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \
1474 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1475 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1476 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1477 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \
1478 JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \
1479 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \
1480 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
1481 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1482 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1483 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \
1484 JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
1485 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1486 # define JSON_HEDLEY_PREDICT(expr, expected, probability) \
1487 (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)))
1488 # define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \
1490 double hedley_probability_ = (probability); \
1491 ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \
1493 # define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \
1495 double hedley_probability_ = (probability); \
1496 ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \
1498 # define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1)
1499 # define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
1501 # define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))
1502 # define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr))
1503 # define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr))
1504 # define JSON_HEDLEY_LIKELY(expr) (!!(expr))
1505 # define JSON_HEDLEY_UNLIKELY(expr) (!!(expr))
1507 #if !defined(JSON_HEDLEY_UNPREDICTABLE)
1508 #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5)
1511 #if defined(JSON_HEDLEY_MALLOC)
1512 #undef JSON_HEDLEY_MALLOC
1515 JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \
1516 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1517 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1518 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1519 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1520 JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \
1521 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1522 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1523 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1524 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1525 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1526 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1527 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1528 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1529 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1530 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1531 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1532 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1533 #define JSON_HEDLEY_MALLOC __attribute__((__malloc__))
1534 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1535 #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory")
1537 JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
1538 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1539 #define JSON_HEDLEY_MALLOC __declspec(restrict)
1541 #define JSON_HEDLEY_MALLOC
1544 #if defined(JSON_HEDLEY_PURE)
1545 #undef JSON_HEDLEY_PURE
1548 JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \
1549 JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \
1550 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1551 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1552 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1553 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1554 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1555 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1556 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1557 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1558 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1559 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1560 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1561 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1562 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1563 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1564 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1565 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1566 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1567 # define JSON_HEDLEY_PURE __attribute__((__pure__))
1568 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1569 # define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data")
1570 #elif defined(__cplusplus) && \
1572 JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \
1573 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \
1574 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \
1576 # define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;")
1578 # define JSON_HEDLEY_PURE
1581 #if defined(JSON_HEDLEY_CONST)
1582 #undef JSON_HEDLEY_CONST
1585 JSON_HEDLEY_HAS_ATTRIBUTE(const) || \
1586 JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \
1587 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1588 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1589 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1590 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1591 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1592 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1593 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1594 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1595 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1596 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1597 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1598 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1599 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1600 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1601 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1602 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1603 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1604 #define JSON_HEDLEY_CONST __attribute__((__const__))
1606 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1607 #define JSON_HEDLEY_CONST _Pragma("no_side_effect")
1609 #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE
1612 #if defined(JSON_HEDLEY_RESTRICT)
1613 #undef JSON_HEDLEY_RESTRICT
1615 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus)
1616 #define JSON_HEDLEY_RESTRICT restrict
1618 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1619 JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
1620 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1621 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
1622 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1623 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1624 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1625 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1626 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \
1627 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \
1628 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1629 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \
1630 JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \
1631 defined(__clang__) || \
1632 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1633 #define JSON_HEDLEY_RESTRICT __restrict
1634 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus)
1635 #define JSON_HEDLEY_RESTRICT _Restrict
1637 #define JSON_HEDLEY_RESTRICT
1640 #if defined(JSON_HEDLEY_INLINE)
1641 #undef JSON_HEDLEY_INLINE
1644 (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
1645 (defined(__cplusplus) && (__cplusplus >= 199711L))
1646 #define JSON_HEDLEY_INLINE inline
1648 defined(JSON_HEDLEY_GCC_VERSION) || \
1649 JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0)
1650 #define JSON_HEDLEY_INLINE __inline__
1652 JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \
1653 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
1654 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1655 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \
1656 JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \
1657 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
1658 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \
1659 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1660 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1661 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1662 #define JSON_HEDLEY_INLINE __inline
1664 #define JSON_HEDLEY_INLINE
1667 #if defined(JSON_HEDLEY_ALWAYS_INLINE)
1668 #undef JSON_HEDLEY_ALWAYS_INLINE
1671 JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \
1672 JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
1673 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1674 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1675 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1676 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1677 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1678 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1679 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1680 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1681 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1682 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1683 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1684 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1685 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1686 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1687 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1688 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
1689 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1690 # define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE
1692 JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \
1693 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1694 # define JSON_HEDLEY_ALWAYS_INLINE __forceinline
1695 #elif defined(__cplusplus) && \
1697 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1698 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1699 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1700 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
1701 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1702 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \
1704 # define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
1705 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1706 # define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced")
1708 # define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE
1711 #if defined(JSON_HEDLEY_NEVER_INLINE)
1712 #undef JSON_HEDLEY_NEVER_INLINE
1715 JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \
1716 JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
1717 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1718 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1719 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1720 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1721 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1722 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1723 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1724 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1725 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1726 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1727 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1728 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1729 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1730 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1731 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1732 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
1733 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1734 #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__))
1736 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1737 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1738 #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
1739 #elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0)
1740 #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline")
1741 #elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)
1742 #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;")
1743 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1744 #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never")
1745 #elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)
1746 #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline))
1747 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)
1748 #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
1750 #define JSON_HEDLEY_NEVER_INLINE
1753 #if defined(JSON_HEDLEY_PRIVATE)
1754 #undef JSON_HEDLEY_PRIVATE
1756 #if defined(JSON_HEDLEY_PUBLIC)
1757 #undef JSON_HEDLEY_PUBLIC
1759 #if defined(JSON_HEDLEY_IMPORT)
1760 #undef JSON_HEDLEY_IMPORT
1762 #if defined(_WIN32) || defined(__CYGWIN__)
1763 # define JSON_HEDLEY_PRIVATE
1764 # define JSON_HEDLEY_PUBLIC __declspec(dllexport)
1765 # define JSON_HEDLEY_IMPORT __declspec(dllimport)
1768 JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \
1769 JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
1770 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1771 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1772 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1773 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
1775 defined(__TI_EABI__) && \
1777 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1778 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \
1781 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1782 # define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden")))
1783 # define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default")))
1785 # define JSON_HEDLEY_PRIVATE
1786 # define JSON_HEDLEY_PUBLIC
1788 # define JSON_HEDLEY_IMPORT extern
1791 #if defined(JSON_HEDLEY_NO_THROW)
1792 #undef JSON_HEDLEY_NO_THROW
1795 JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \
1796 JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
1797 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1798 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1799 #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__))
1801 JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \
1802 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
1803 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)
1804 #define JSON_HEDLEY_NO_THROW __declspec(nothrow)
1806 #define JSON_HEDLEY_NO_THROW
1809 #if defined(JSON_HEDLEY_FALL_THROUGH)
1810 #undef JSON_HEDLEY_FALL_THROUGH
1813 JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \
1814 JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \
1815 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1816 #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__))
1817 #elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough)
1818 #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]])
1819 #elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough)
1820 #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]])
1821 #elif defined(__fallthrough)
1822 #define JSON_HEDLEY_FALL_THROUGH __fallthrough
1824 #define JSON_HEDLEY_FALL_THROUGH
1827 #if defined(JSON_HEDLEY_RETURNS_NON_NULL)
1828 #undef JSON_HEDLEY_RETURNS_NON_NULL
1831 JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \
1832 JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \
1833 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1834 #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__))
1835 #elif defined(_Ret_notnull_)
1836 #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_
1838 #define JSON_HEDLEY_RETURNS_NON_NULL
1841 #if defined(JSON_HEDLEY_ARRAY_PARAM)
1842 #undef JSON_HEDLEY_ARRAY_PARAM
1845 defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
1846 !defined(__STDC_NO_VLA__) && \
1847 !defined(__cplusplus) && \
1848 !defined(JSON_HEDLEY_PGI_VERSION) && \
1849 !defined(JSON_HEDLEY_TINYC_VERSION)
1850 #define JSON_HEDLEY_ARRAY_PARAM(name) (name)
1852 #define JSON_HEDLEY_ARRAY_PARAM(name)
1855 #if defined(JSON_HEDLEY_IS_CONSTANT)
1856 #undef JSON_HEDLEY_IS_CONSTANT
1858 #if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR)
1859 #undef JSON_HEDLEY_REQUIRE_CONSTEXPR
1863 #if defined(JSON_HEDLEY_IS_CONSTEXPR_)
1864 #undef JSON_HEDLEY_IS_CONSTEXPR_
1867 JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \
1868 JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
1869 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1870 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \
1871 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1872 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
1873 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
1874 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \
1875 JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
1876 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1877 #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr)
1879 #if !defined(__cplusplus)
1881 JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \
1882 JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
1883 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1884 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
1885 JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
1886 JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \
1887 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24)
1888 #if defined(__INTPTR_TYPE__)
1889 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*)
1892 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*)
1896 defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \
1897 !defined(JSON_HEDLEY_SUNPRO_VERSION) && \
1898 !defined(JSON_HEDLEY_PGI_VERSION) && \
1899 !defined(JSON_HEDLEY_IAR_VERSION)) || \
1900 (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
1901 JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \
1902 JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \
1903 JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \
1904 JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0)
1905 #if defined(__INTPTR_TYPE__)
1906 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0)
1909 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0)
1912 defined(JSON_HEDLEY_GCC_VERSION) || \
1913 defined(JSON_HEDLEY_INTEL_VERSION) || \
1914 defined(JSON_HEDLEY_TINYC_VERSION) || \
1915 defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \
1916 JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \
1917 defined(JSON_HEDLEY_TI_CL2000_VERSION) || \
1918 defined(JSON_HEDLEY_TI_CL6X_VERSION) || \
1919 defined(JSON_HEDLEY_TI_CL7X_VERSION) || \
1920 defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \
1922 # define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \
1926 ((void*) ((expr) * 0L) ) : \
1927 ((struct { char v[sizeof(void) * 2]; } *) 1) \
1933 #if defined(JSON_HEDLEY_IS_CONSTEXPR_)
1934 #if !defined(JSON_HEDLEY_IS_CONSTANT)
1935 #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr)
1937 #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1))
1939 #if !defined(JSON_HEDLEY_IS_CONSTANT)
1940 #define JSON_HEDLEY_IS_CONSTANT(expr) (0)
1942 #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr)
1945 #if defined(JSON_HEDLEY_BEGIN_C_DECLS)
1946 #undef JSON_HEDLEY_BEGIN_C_DECLS
1948 #if defined(JSON_HEDLEY_END_C_DECLS)
1949 #undef JSON_HEDLEY_END_C_DECLS
1951 #if defined(JSON_HEDLEY_C_DECL)
1952 #undef JSON_HEDLEY_C_DECL
1954 #if defined(__cplusplus)
1955 #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" {
1956 #define JSON_HEDLEY_END_C_DECLS }
1957 #define JSON_HEDLEY_C_DECL extern "C"
1959 #define JSON_HEDLEY_BEGIN_C_DECLS
1960 #define JSON_HEDLEY_END_C_DECLS
1961 #define JSON_HEDLEY_C_DECL
1964 #if defined(JSON_HEDLEY_STATIC_ASSERT)
1965 #undef JSON_HEDLEY_STATIC_ASSERT
1968 !defined(__cplusplus) && ( \
1969 (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \
1970 (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
1971 JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \
1972 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1973 defined(_Static_assert) \
1975 # define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message)
1977 (defined(__cplusplus) && (__cplusplus >= 201103L)) || \
1978 JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \
1979 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1980 # define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message))
1982 # define JSON_HEDLEY_STATIC_ASSERT(expr, message)
1985 #if defined(JSON_HEDLEY_NULL)
1986 #undef JSON_HEDLEY_NULL
1988 #if defined(__cplusplus)
1989 #if __cplusplus >= 201103L
1990 #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr)
1992 #define JSON_HEDLEY_NULL NULL
1994 #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0)
1997 #define JSON_HEDLEY_NULL NULL
1999 #define JSON_HEDLEY_NULL ((void*) 0)
2002 #if defined(JSON_HEDLEY_MESSAGE)
2003 #undef JSON_HEDLEY_MESSAGE
2005 #if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
2006 # define JSON_HEDLEY_MESSAGE(msg) \
2007 JSON_HEDLEY_DIAGNOSTIC_PUSH \
2008 JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
2009 JSON_HEDLEY_PRAGMA(message msg) \
2010 JSON_HEDLEY_DIAGNOSTIC_POP
2012 JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \
2013 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
2014 # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg)
2015 #elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0)
2016 # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg)
2017 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
2018 # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))
2019 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0)
2020 # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))
2022 # define JSON_HEDLEY_MESSAGE(msg)
2025 #if defined(JSON_HEDLEY_WARNING)
2026 #undef JSON_HEDLEY_WARNING
2028 #if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
2029 # define JSON_HEDLEY_WARNING(msg) \
2030 JSON_HEDLEY_DIAGNOSTIC_PUSH \
2031 JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
2032 JSON_HEDLEY_PRAGMA(clang warning msg) \
2033 JSON_HEDLEY_DIAGNOSTIC_POP
2035 JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \
2036 JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \
2037 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
2038 # define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg)
2040 JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \
2041 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
2042 # define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg))
2044 # define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg)
2047 #if defined(JSON_HEDLEY_REQUIRE)
2048 #undef JSON_HEDLEY_REQUIRE
2050 #if defined(JSON_HEDLEY_REQUIRE_MSG)
2051 #undef JSON_HEDLEY_REQUIRE_MSG
2053 #if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if)
2054 # if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat")
2055 # define JSON_HEDLEY_REQUIRE(expr) \
2056 JSON_HEDLEY_DIAGNOSTIC_PUSH \
2057 _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
2058 __attribute__((diagnose_if(!(expr), #expr, "error"))) \
2059 JSON_HEDLEY_DIAGNOSTIC_POP
2060 # define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \
2061 JSON_HEDLEY_DIAGNOSTIC_PUSH \
2062 _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
2063 __attribute__((diagnose_if(!(expr), msg, "error"))) \
2064 JSON_HEDLEY_DIAGNOSTIC_POP
2066 # define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error")))
2067 # define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error")))
2070 # define JSON_HEDLEY_REQUIRE(expr)
2071 # define JSON_HEDLEY_REQUIRE_MSG(expr,msg)
2074 #if defined(JSON_HEDLEY_FLAGS)
2075 #undef JSON_HEDLEY_FLAGS
2077 #if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion"))
2078 #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__))
2080 #define JSON_HEDLEY_FLAGS
2083 #if defined(JSON_HEDLEY_FLAGS_CAST)
2084 #undef JSON_HEDLEY_FLAGS_CAST
2086 #if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0)
2087 # define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \
2088 JSON_HEDLEY_DIAGNOSTIC_PUSH \
2089 _Pragma("warning(disable:188)") \
2091 JSON_HEDLEY_DIAGNOSTIC_POP \
2094 # define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr)
2097 #if defined(JSON_HEDLEY_EMPTY_BASES)
2098 #undef JSON_HEDLEY_EMPTY_BASES
2101 (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \
2102 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
2103 #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases)
2105 #define JSON_HEDLEY_EMPTY_BASES
2110 #if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK)
2111 #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK
2113 #if defined(__clang__)
2114 #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0)
2116 #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
2119 #if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE)
2120 #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE
2122 #define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
2124 #if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE)
2125 #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE
2127 #define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute)
2129 #if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN)
2130 #undef JSON_HEDLEY_CLANG_HAS_BUILTIN
2132 #define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin)
2134 #if defined(JSON_HEDLEY_CLANG_HAS_FEATURE)
2135 #undef JSON_HEDLEY_CLANG_HAS_FEATURE
2137 #define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature)
2139 #if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION)
2140 #undef JSON_HEDLEY_CLANG_HAS_EXTENSION
2142 #define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension)
2144 #if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE)
2145 #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE
2147 #define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute)
2149 #if defined(JSON_HEDLEY_CLANG_HAS_WARNING)
2150 #undef JSON_HEDLEY_CLANG_HAS_WARNING
2152 #define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning)
2159 #include <type_traits>
2192 template<
class Default,
2194 template<
class...>
class Op,
2202 template<
class Default,
template<
class...>
class Op,
class... Args>
2209 template<
template<
class...>
class Op,
class... Args>
2212 template<
template<
class...>
class Op,
class... Args>
2215 template<
template<
class...>
class Op,
class... Args>
2218 template<
class Default,
template<
class...>
class Op,
class... Args>
2221 template<
class Default,
template<
class...>
class Op,
class... Args>
2224 template<
class Expected,
template<
class...>
class Op,
class... Args>
2227 template<
class To,
template<
class...>
class Op,
class... Args>
2229 std::is_convertible<
detected_t<Op, Args...>, To>;
2238 #if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK)
2239 #if defined(__clang__)
2240 #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400
2241 #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers"
2243 #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER))
2244 #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800
2245 #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers"
2252 #if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11)
2253 #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L)
2254 #define JSON_HAS_CPP_20
2255 #define JSON_HAS_CPP_17
2256 #define JSON_HAS_CPP_14
2257 #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1)
2258 #define JSON_HAS_CPP_17
2259 #define JSON_HAS_CPP_14
2260 #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1)
2261 #define JSON_HAS_CPP_14
2264 #define JSON_HAS_CPP_11
2267 #ifdef __has_include
2268 #if __has_include(<version>)
2273 #if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM)
2274 #ifdef JSON_HAS_CPP_17
2275 #if defined(__cpp_lib_filesystem)
2276 #define JSON_HAS_FILESYSTEM 1
2277 #elif defined(__cpp_lib_experimental_filesystem)
2278 #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
2279 #elif !defined(__has_include)
2280 #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
2281 #elif __has_include(<filesystem>)
2282 #define JSON_HAS_FILESYSTEM 1
2283 #elif __has_include(<experimental/filesystem>)
2284 #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
2288 #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8
2289 #undef JSON_HAS_FILESYSTEM
2290 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2294 #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8
2295 #undef JSON_HAS_FILESYSTEM
2296 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2300 #if defined(__clang_major__) && __clang_major__ < 7
2301 #undef JSON_HAS_FILESYSTEM
2302 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2306 #if defined(_MSC_VER) && _MSC_VER < 1914
2307 #undef JSON_HAS_FILESYSTEM
2308 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2312 #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
2313 #undef JSON_HAS_FILESYSTEM
2314 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2318 #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500
2319 #undef JSON_HAS_FILESYSTEM
2320 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2325 #ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2326 #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0
2329 #ifndef JSON_HAS_FILESYSTEM
2330 #define JSON_HAS_FILESYSTEM 0
2333 #ifndef JSON_HAS_THREE_WAY_COMPARISON
2334 #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \
2335 && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L
2336 #define JSON_HAS_THREE_WAY_COMPARISON 1
2338 #define JSON_HAS_THREE_WAY_COMPARISON 0
2342 #ifndef JSON_HAS_RANGES
2344 #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427
2345 #define JSON_HAS_RANGES 0
2346 #elif defined(__cpp_lib_ranges)
2347 #define JSON_HAS_RANGES 1
2349 #define JSON_HAS_RANGES 0
2353 #ifdef JSON_HAS_CPP_17
2354 #define JSON_INLINE_VARIABLE inline
2356 #define JSON_INLINE_VARIABLE
2359 #if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address)
2360 #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]]
2362 #define JSON_NO_UNIQUE_ADDRESS
2366 #if defined(__clang__)
2367 #pragma clang diagnostic push
2368 #pragma clang diagnostic ignored "-Wdocumentation"
2369 #pragma clang diagnostic ignored "-Wdocumentation-unknown-command"
2373 #if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION)
2374 #define JSON_THROW(exception) throw exception
2375 #define JSON_TRY try
2376 #define JSON_CATCH(exception) catch(exception)
2377 #define JSON_INTERNAL_CATCH(exception) catch(exception)
2380 #define JSON_THROW(exception) std::abort()
2381 #define JSON_TRY if(true)
2382 #define JSON_CATCH(exception) if(false)
2383 #define JSON_INTERNAL_CATCH(exception) if(false)
2387 #if defined(JSON_THROW_USER)
2389 #define JSON_THROW JSON_THROW_USER
2391 #if defined(JSON_TRY_USER)
2393 #define JSON_TRY JSON_TRY_USER
2395 #if defined(JSON_CATCH_USER)
2397 #define JSON_CATCH JSON_CATCH_USER
2398 #undef JSON_INTERNAL_CATCH
2399 #define JSON_INTERNAL_CATCH JSON_CATCH_USER
2401 #if defined(JSON_INTERNAL_CATCH_USER)
2402 #undef JSON_INTERNAL_CATCH
2403 #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER
2407 #if !defined(JSON_ASSERT)
2409 #define JSON_ASSERT(x) assert(x)
2413 #if defined(JSON_TESTS_PRIVATE)
2414 #define JSON_PRIVATE_UNLESS_TESTED public
2416 #define JSON_PRIVATE_UNLESS_TESTED private
2424 #define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \
2425 template<typename BasicJsonType> \
2426 inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \
2428 static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
2429 static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
2430 auto it = std::find_if(std::begin(m), std::end(m), \
2431 [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \
2433 return ej_pair.first == e; \
2435 j = ((it != std::end(m)) ? it : std::begin(m))->second; \
2437 template<typename BasicJsonType> \
2438 inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \
2440 static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
2441 static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
2442 auto it = std::find_if(std::begin(m), std::end(m), \
2443 [&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \
2445 return ej_pair.second == j; \
2447 e = ((it != std::end(m)) ? it : std::begin(m))->first; \
2453 #define NLOHMANN_BASIC_JSON_TPL_DECLARATION \
2454 template<template<typename, typename, typename...> class ObjectType, \
2455 template<typename, typename...> class ArrayType, \
2456 class StringType, class BooleanType, class NumberIntegerType, \
2457 class NumberUnsignedType, class NumberFloatType, \
2458 template<typename> class AllocatorType, \
2459 template<typename, typename = void> class JSONSerializer, \
2462 #define NLOHMANN_BASIC_JSON_TPL \
2463 basic_json<ObjectType, ArrayType, StringType, BooleanType, \
2464 NumberIntegerType, NumberUnsignedType, NumberFloatType, \
2465 AllocatorType, JSONSerializer, BinaryType>
2469 #define NLOHMANN_JSON_EXPAND( x ) x
2470 #define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _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, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME
2471 #define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \
2472 NLOHMANN_JSON_PASTE64, \
2473 NLOHMANN_JSON_PASTE63, \
2474 NLOHMANN_JSON_PASTE62, \
2475 NLOHMANN_JSON_PASTE61, \
2476 NLOHMANN_JSON_PASTE60, \
2477 NLOHMANN_JSON_PASTE59, \
2478 NLOHMANN_JSON_PASTE58, \
2479 NLOHMANN_JSON_PASTE57, \
2480 NLOHMANN_JSON_PASTE56, \
2481 NLOHMANN_JSON_PASTE55, \
2482 NLOHMANN_JSON_PASTE54, \
2483 NLOHMANN_JSON_PASTE53, \
2484 NLOHMANN_JSON_PASTE52, \
2485 NLOHMANN_JSON_PASTE51, \
2486 NLOHMANN_JSON_PASTE50, \
2487 NLOHMANN_JSON_PASTE49, \
2488 NLOHMANN_JSON_PASTE48, \
2489 NLOHMANN_JSON_PASTE47, \
2490 NLOHMANN_JSON_PASTE46, \
2491 NLOHMANN_JSON_PASTE45, \
2492 NLOHMANN_JSON_PASTE44, \
2493 NLOHMANN_JSON_PASTE43, \
2494 NLOHMANN_JSON_PASTE42, \
2495 NLOHMANN_JSON_PASTE41, \
2496 NLOHMANN_JSON_PASTE40, \
2497 NLOHMANN_JSON_PASTE39, \
2498 NLOHMANN_JSON_PASTE38, \
2499 NLOHMANN_JSON_PASTE37, \
2500 NLOHMANN_JSON_PASTE36, \
2501 NLOHMANN_JSON_PASTE35, \
2502 NLOHMANN_JSON_PASTE34, \
2503 NLOHMANN_JSON_PASTE33, \
2504 NLOHMANN_JSON_PASTE32, \
2505 NLOHMANN_JSON_PASTE31, \
2506 NLOHMANN_JSON_PASTE30, \
2507 NLOHMANN_JSON_PASTE29, \
2508 NLOHMANN_JSON_PASTE28, \
2509 NLOHMANN_JSON_PASTE27, \
2510 NLOHMANN_JSON_PASTE26, \
2511 NLOHMANN_JSON_PASTE25, \
2512 NLOHMANN_JSON_PASTE24, \
2513 NLOHMANN_JSON_PASTE23, \
2514 NLOHMANN_JSON_PASTE22, \
2515 NLOHMANN_JSON_PASTE21, \
2516 NLOHMANN_JSON_PASTE20, \
2517 NLOHMANN_JSON_PASTE19, \
2518 NLOHMANN_JSON_PASTE18, \
2519 NLOHMANN_JSON_PASTE17, \
2520 NLOHMANN_JSON_PASTE16, \
2521 NLOHMANN_JSON_PASTE15, \
2522 NLOHMANN_JSON_PASTE14, \
2523 NLOHMANN_JSON_PASTE13, \
2524 NLOHMANN_JSON_PASTE12, \
2525 NLOHMANN_JSON_PASTE11, \
2526 NLOHMANN_JSON_PASTE10, \
2527 NLOHMANN_JSON_PASTE9, \
2528 NLOHMANN_JSON_PASTE8, \
2529 NLOHMANN_JSON_PASTE7, \
2530 NLOHMANN_JSON_PASTE6, \
2531 NLOHMANN_JSON_PASTE5, \
2532 NLOHMANN_JSON_PASTE4, \
2533 NLOHMANN_JSON_PASTE3, \
2534 NLOHMANN_JSON_PASTE2, \
2535 NLOHMANN_JSON_PASTE1)(__VA_ARGS__))
2536 #define NLOHMANN_JSON_PASTE2(func, v1) func(v1)
2537 #define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2)
2538 #define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3)
2539 #define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4)
2540 #define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5)
2541 #define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6)
2542 #define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7)
2543 #define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8)
2544 #define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9)
2545 #define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10)
2546 #define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)
2547 #define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)
2548 #define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13)
2549 #define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14)
2550 #define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15)
2551 #define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16)
2552 #define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)
2553 #define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18)
2554 #define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19)
2555 #define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20)
2556 #define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21)
2557 #define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22)
2558 #define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23)
2559 #define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24)
2560 #define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25)
2561 #define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26)
2562 #define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27)
2563 #define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28)
2564 #define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29)
2565 #define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30)
2566 #define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31)
2567 #define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32)
2568 #define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33)
2569 #define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34)
2570 #define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35)
2571 #define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36)
2572 #define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37)
2573 #define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38)
2574 #define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39)
2575 #define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40)
2576 #define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41)
2577 #define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42)
2578 #define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43)
2579 #define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44)
2580 #define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45)
2581 #define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46)
2582 #define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47)
2583 #define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48)
2584 #define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49)
2585 #define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50)
2586 #define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51)
2587 #define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52)
2588 #define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53)
2589 #define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54)
2590 #define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55)
2591 #define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56)
2592 #define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57)
2593 #define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58)
2594 #define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59)
2595 #define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60)
2596 #define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61)
2597 #define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62)
2598 #define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63)
2600 #define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1;
2601 #define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1);
2602 #define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1);
2609 #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \
2610 friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
2611 friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) }
2613 #define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \
2614 friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
2615 friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { Type nlohmann_json_default_obj; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
2622 #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \
2623 inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
2624 inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) }
2626 #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \
2627 inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
2628 inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { Type nlohmann_json_default_obj; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
2637 #define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \
2638 namespace detail { \
2639 using std::std_name; \
2641 template<typename... T> \
2642 using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
2645 namespace detail2 { \
2646 struct std_name##_tag \
2650 template<typename... T> \
2651 std_name##_tag std_name(T&&...); \
2653 template<typename... T> \
2654 using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
2656 template<typename... T> \
2657 struct would_call_std_##std_name \
2659 static constexpr auto const value = ::nlohmann::detail:: \
2660 is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \
2664 template<typename... T> \
2665 struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...> \
2669 #ifndef JSON_USE_IMPLICIT_CONVERSIONS
2670 #define JSON_USE_IMPLICIT_CONVERSIONS 1
2673 #if JSON_USE_IMPLICIT_CONVERSIONS
2674 #define JSON_EXPLICIT
2676 #define JSON_EXPLICIT explicit
2679 #ifndef JSON_DIAGNOSTICS
2680 #define JSON_DIAGNOSTICS 0
2683 #ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
2684 #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
2687 #ifndef JSON_DISABLE_ENUM_SERIALIZATION
2688 #define JSON_DISABLE_ENUM_SERIALIZATION 0
2691 #if JSON_HAS_THREE_WAY_COMPARISON
2754 #if JSON_HAS_THREE_WAY_COMPARISON
2755 inline std::partial_ordering operator<=>(
const value_t lhs,
const value_t rhs) noexcept
2760 static constexpr std::array<std::uint8_t, 9> order = {{
2767 const auto l_index =
static_cast<std::size_t
>(lhs);
2768 const auto r_index =
static_cast<std::size_t
>(rhs);
2769 #if JSON_HAS_THREE_WAY_COMPARISON
2770 if (l_index < order.size() && r_index < order.size())
2772 return order[l_index] <=> order[r_index];
2774 return std::partial_ordering::unordered;
2776 return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index];
2784 #if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__)
2787 return std::is_lt(lhs <=> rhs);
2817 template<
typename StringType>
2819 const StringType& t)
2822 for (
auto pos = s.find(f);
2823 pos != StringType::npos;
2824 s.replace(pos, f.size(), t),
2825 pos = s.find(f, pos + t.size()))
2836 template<
typename StringType>
2851 template<
typename StringType>
2852 static void unescape(StringType& s)
2881 constexpr
operator size_t()
const
2896 #include <type_traits>
2907 template<
typename T>
2910 #ifdef JSON_HAS_CPP_14
2921 template<
bool B,
typename T =
void>
2948 template <
typename T, T... Ints>
2952 static constexpr std::size_t
size() noexcept
2954 return sizeof...(Ints);
2963 template <
size_t... Ints>
2966 namespace utility_internal
2969 template <
typename Seq,
size_t SeqSize,
size_t Rem>
2973 template <
typename T, T... Ints,
size_t SeqSize>
2979 template <
typename T, T... Ints,
size_t SeqSize>
2987 template <
typename T,
size_t N>
2994 template <
typename T>
3009 template <
typename T, T N>
3025 template <
typename... Ts>
3037 template<
typename T>
3043 #ifndef JSON_HAS_CPP_17
3045 template<
typename T>
3057 #include <type_traits>
3078 template<
typename It,
typename =
void>
3081 template<
typename It>
3085 typename It::reference, typename It::iterator_category >>
3096 template<
typename T,
typename =
void>
3101 template<
typename T>
3107 template<
typename T>
3146 #ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_
3147 #define INCLUDE_NLOHMANN_JSON_FWD_HPP_
3169 template<
typename T =
void,
typename SFINAE =
void>
3170 struct adl_serializer;
3174 template<
template<
typename U,
typename V,
typename... Args>
class ObjectType =
3176 template<
typename U,
typename... Args>
class ArrayType = std::vector,
3177 class StringType = std::string,
class BooleanType = bool,
3178 class NumberIntegerType = std::int64_t,
3179 class NumberUnsignedType = std::uint64_t,
3180 class NumberFloatType = double,
3181 template<
typename U>
class AllocatorType = std::allocator,
3182 template<
typename T,
typename SFINAE =
void>
class JSONSerializer =
3184 class BinaryType = std::vector<std::uint8_t>>
3189 template<
typename BasicJsonType>
3200 template<
class Key,
class T,
class IgnoredLess,
class Allocator>
3245 template<
typename BasicJsonContext>
3247 std::integral_constant < bool,
3248 is_basic_json<typename std::remove_cv<typename std::remove_pointer<BasicJsonContext>::type>::type>::value
3249 || std::is_same<BasicJsonContext, std::nullptr_t>::value >
3262 template<
typename T>
3269 template<
typename T>
3272 template<
typename T>
3275 template<
typename T>
3278 template<
typename T>
3281 template<
typename T>
3284 template<
typename T>
3287 template<
typename T>
3290 template<
typename T,
typename... Args>
3293 template<
typename T,
typename... Args>
3296 template<
typename T,
typename U>
3300 template<
typename BasicJsonType,
typename T,
typename =
void>
3307 template <
typename BasicJsonType,
typename T>
3313 template<
typename BasicJsonType,
typename T>
3316 using serializer =
typename BasicJsonType::template json_serializer<T, void>;
3320 const BasicJsonType&, T&>::value;
3325 template<
typename BasicJsonType,
typename T,
typename =
void>
3328 template<
typename BasicJsonType,
typename T>
3331 using serializer =
typename BasicJsonType::template json_serializer<T, void>;
3335 const BasicJsonType&>::value;
3340 template<
typename BasicJsonType,
typename T,
typename =
void>
3343 template<
typename BasicJsonType,
typename T>
3346 using serializer =
typename BasicJsonType::template json_serializer<T, void>;
3353 template<
typename T>
3356 template<
typename T>
3357 struct has_key_compare : std::integral_constant<bool, is_detected<detect_key_compare, T>::value> {};
3360 template<
typename BasicJsonType>
3365 using type =
typename std::conditional < has_key_compare<object_t>::value,
3369 template<
typename BasicJsonType>
3379 template<
class B,
class... Bn>
3381 : std::conditional<static_cast<bool>(B::value), conjunction<Bn...>, B>
::type {};
3384 template<
class B>
struct negation : std::integral_constant < bool, !B::value > { };
3389 template <
typename T>
3392 template <
typename T1,
typename T2>
3394 :
conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {};
3396 template <
typename T1,
typename T2>
3398 :
conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {};
3400 template <
typename... Ts>
3402 :
conjunction<is_default_constructible<Ts>...> {};
3404 template <
typename... Ts>
3406 :
conjunction<is_default_constructible<Ts>...> {};
3409 template <
typename T,
typename... Args>
3412 template <
typename T1,
typename T2>
3415 template <
typename T1,
typename T2>
3418 template <
typename... Ts>
3421 template <
typename... Ts>
3425 template<
typename T,
typename =
void>
3428 template<
typename T>
3443 template<
typename T>
3455 static constexpr
auto is_iterator_begin =
3459 static constexpr
bool value = !std::is_same<iterator, nonesuch>::value && !std::is_same<sentinel, nonesuch>::value && is_iterator_begin;
3462 template<
typename R>
3465 template<
typename T>
3472 template<
typename T,
typename =
void>
3475 template<
typename T>
3478 template<
typename BasicJsonType,
typename CompatibleObjectType,
3482 template<
typename BasicJsonType,
typename CompatibleObjectType>
3484 BasicJsonType, CompatibleObjectType,
3486 is_detected<key_type_t, CompatibleObjectType>::value >>
3493 typename CompatibleObjectType::key_type>::value &&
3495 typename CompatibleObjectType::mapped_type>::value;
3498 template<
typename BasicJsonType,
typename CompatibleObjectType>
3502 template<
typename BasicJsonType,
typename ConstructibleObjectType,
3506 template<
typename BasicJsonType,
typename ConstructibleObjectType>
3508 BasicJsonType, ConstructibleObjectType,
3510 is_detected<key_type_t, ConstructibleObjectType>::value >>
3516 (std::is_move_assignable<ConstructibleObjectType>::value ||
3517 std::is_copy_assignable<ConstructibleObjectType>::value) &&
3519 typename object_t::key_type>::value &&
3521 typename object_t::mapped_type,
3522 typename ConstructibleObjectType::mapped_type >::value)) ||
3524 typename ConstructibleObjectType::mapped_type>::value ||
3527 typename ConstructibleObjectType::mapped_type >::value);
3530 template<
typename BasicJsonType,
typename ConstructibleObjectType>
3533 ConstructibleObjectType> {};
3535 template<
typename BasicJsonType,
typename CompatibleStringType>
3542 template<
typename BasicJsonType,
typename ConstructibleStringType>
3546 #ifdef __INTEL_COMPILER
3547 using laundered_type = decltype(std::declval<ConstructibleStringType>());
3554 typename BasicJsonType::string_t>
::value;
3557 template<
typename BasicJsonType,
typename CompatibleArrayType,
typename =
void>
3560 template<
typename BasicJsonType,
typename CompatibleArrayType>
3562 BasicJsonType, CompatibleArrayType,
3565 is_iterator_traits<iterator_traits<detected_t<iterator_t, CompatibleArrayType>>>::value&&
3568 !std::is_same<CompatibleArrayType, detected_t<range_value_t, CompatibleArrayType>>::value >>
3575 template<
typename BasicJsonType,
typename CompatibleArrayType>
3579 template<
typename BasicJsonType,
typename ConstructibleArrayType,
typename =
void>
3582 template<
typename BasicJsonType,
typename ConstructibleArrayType>
3584 BasicJsonType, ConstructibleArrayType,
3586 typename BasicJsonType::value_type>::value >>
3587 : std::true_type {};
3589 template<
typename BasicJsonType,
typename ConstructibleArrayType>
3591 BasicJsonType, ConstructibleArrayType,
3593 typename BasicJsonType::value_type>::value&&
3596 (std::is_move_assignable<ConstructibleArrayType>::value ||
3597 std::is_copy_assignable<ConstructibleArrayType>::value)&&
3598 is_detected<iterator_t, ConstructibleArrayType>::value&&
3599 is_iterator_traits<iterator_traits<detected_t<iterator_t, ConstructibleArrayType>>>::value&&
3600 is_detected<range_value_t, ConstructibleArrayType>::value&&
3603 !std::is_same<ConstructibleArrayType, detected_t<range_value_t, ConstructibleArrayType>>::value&&
3605 detected_t<range_value_t, ConstructibleArrayType >>::value >>
3611 typename BasicJsonType::array_t::value_type>::value ||
3619 template<
typename BasicJsonType,
typename ConstructibleArrayType>
3623 template<
typename RealIntegerType,
typename CompatibleNumberIntegerType,
3627 template<
typename RealIntegerType,
typename CompatibleNumberIntegerType>
3629 RealIntegerType, CompatibleNumberIntegerType,
3631 std::is_integral<CompatibleNumberIntegerType>::value&&
3632 !std::is_same<bool, CompatibleNumberIntegerType>::value >>
3640 CompatibleNumberIntegerType>::value &&
3641 CompatibleLimits::is_integer &&
3642 RealLimits::is_signed == CompatibleLimits::is_signed;
3645 template<
typename RealIntegerType,
typename CompatibleNumberIntegerType>
3648 CompatibleNumberIntegerType> {};
3650 template<
typename BasicJsonType,
typename CompatibleType,
typename =
void>
3653 template<
typename BasicJsonType,
typename CompatibleType>
3655 BasicJsonType, CompatibleType,
3662 template<
typename BasicJsonType,
typename CompatibleType>
3666 template<
typename T1,
typename T2>
3669 template<
typename T1,
typename... Args>
3672 template<
typename BasicJsonType,
typename T>
3675 template<
typename BasicJsonType>
3678 template<
typename BasicJsonType>
3683 template<
template <
typename...>
class Primary,
typename T>
3686 template<
template <
typename...>
class Primary,
typename... Args>
3689 template<
typename T>
3693 template<
typename Compare,
typename A,
typename B,
typename =
void>
3696 template<
typename Compare,
typename A,
typename B>
3698 decltype(
std::declval<Compare>()(std::declval<A>(), std::declval<B>())),
3699 decltype(std::declval<Compare>()(std::declval<B>(), std::declval<A>()))
3700 >> : std::true_type {};
3702 template<
typename T>
3707 template<
typename Comparator,
typename ObjectKeyType,
typename KeyTypeCVRef,
bool RequireTransparentComparator =
true,
3711 && !(ExcludeObjectKeyType && std::is_same<KeyType,
3712 ObjectKeyType>::value)
3713 && (!RequireTransparentComparator
3725 template<
typename BasicJsonType,
typename KeyTypeCVRef,
bool RequireTransparentComparator =
true,
3729 typename BasicJsonType::object_t::key_type, KeyTypeCVRef,
3730 RequireTransparentComparator, ExcludeObjectKeyType>::value
3735 template<
typename ObjectType,
typename KeyType>
3739 template<
typename BasicJsonType,
typename KeyType>
3743 typename BasicJsonType::object_t, KeyType >::value,
3749 template <
typename T>
3759 template <
typename C>
static one test( decltype(&C::capacity) ) ;
3762 enum {
value =
sizeof(test<T>(
nullptr)) ==
sizeof(
char) };
3766 template < typename T, typename U, enable_if_t < !std::is_same<T, U>::value,
int > = 0 >
3769 return static_cast<T
>(
value);
3772 template<typename T, typename U, enable_if_t<std::is_same<T, U>::value,
int> = 0>
3778 template<
typename... Types>
3781 template<
typename... Types>
3784 template<
typename... Types>
3788 template<
typename... Types>
3792 template<
typename OfType,
typename T>
3794 (std::is_signed<OfType>::value && (
sizeof(T) <
sizeof(OfType)))
3797 template<
typename OfType,
typename T,
3798 bool OfTypeSigned = std::is_signed<OfType>::value,
3799 bool TSigned = std::is_signed<T>::value>
3802 template<
typename OfType,
typename T>
3812 template<
typename OfType,
typename T>
3822 template<
typename OfType,
typename T>
3833 template<
typename OfType,
typename T>
3844 template<
typename OfType,
typename T,
3845 bool NeverOutOfRange = never_out_of_range<OfType, T>::value,
3849 template<
typename OfType,
typename T>
3858 template<
typename OfType,
typename T>
3867 template<
typename OfType,
typename T>
3898 template<
typename... Args>
3899 inline std::size_t
concat_length(
const char* cstr, Args&& ... rest);
3901 template<
typename StringType,
typename... Args>
3902 inline std::size_t
concat_length(
const StringType& str, Args&& ... rest);
3904 template<
typename... Args>
3910 template<
typename... Args>
3914 return ::strlen(cstr) +
concat_length(std::forward<Args>(rest)...);
3917 template<
typename StringType,
typename... Args>
3920 return str.size() +
concat_length(std::forward<Args>(rest)...);
3923 template<
typename OutStringType>
3927 template<
typename StringType,
typename Arg>
3930 template<
typename StringType,
typename Arg>
3933 template<
typename StringType,
typename Arg>
3936 template<
typename StringType,
typename Arg>
3939 template<
typename StringType,
typename Arg>
3940 using string_can_append_iter = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().begin(), std::declval<const Arg&>().end()));
3942 template<
typename StringType,
typename Arg>
3945 template<
typename StringType,
typename Arg>
3946 using string_can_append_data = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().data(), std::declval<const Arg&>().size()));
3948 template<
typename StringType,
typename Arg>
3951 template <
typename OutStringType,
typename Arg,
typename... Args,
3954 inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest);
3956 template <
typename OutStringType,
typename Arg,
typename... Args,
3960 inline void concat_into(OutStringType& out,
const Arg& arg, Args && ... rest);
3962 template <
typename OutStringType,
typename Arg,
typename... Args,
3967 inline void concat_into(OutStringType& out,
const Arg& arg, Args && ... rest);
3969 template<
typename OutStringType,
typename Arg,
typename... Args,
3971 inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest)
3973 out.append(std::forward<Arg>(arg));
3977 template <
typename OutStringType,
typename Arg,
typename... Args,
3978 enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
3979 && detect_string_can_append_op<OutStringType, Arg>::value,
int > >
3980 inline void concat_into(OutStringType& out, Arg&& arg, Args&& ... rest)
3982 out += std::forward<Arg>(arg);
3986 template <
typename OutStringType,
typename Arg,
typename... Args,
3987 enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
3988 && !detect_string_can_append_op<OutStringType, Arg>::value
3989 && detect_string_can_append_iter<OutStringType, Arg>::value,
int > >
3990 inline void concat_into(OutStringType& out,
const Arg& arg, Args&& ... rest)
3992 out.append(arg.begin(), arg.end());
3996 template <
typename OutStringType,
typename Arg,
typename... Args,
3997 enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
3998 && !detect_string_can_append_op<OutStringType, Arg>::value
3999 && !detect_string_can_append_iter<OutStringType, Arg>::value
4000 && detect_string_can_append_data<OutStringType, Arg>::value,
int > >
4001 inline void concat_into(OutStringType& out,
const Arg& arg, Args&& ... rest)
4003 out.append(arg.data(), arg.size());
4007 template<
typename OutStringType = std::string,
typename... Args>
4008 inline OutStringType
concat(Args && ... args)
4035 const char*
what() const noexcept
override
4045 exception(
int id_, const
char* what_arg) :
id(id_), m(what_arg) {}
4047 static std::string
name(
const std::string& ename,
int id_)
4057 template<
typename BasicJsonType>
4060 #if JSON_DIAGNOSTICS
4061 std::vector<std::string> tokens;
4062 for (
const auto* current = leaf_element; current !=
nullptr && current->m_parent !=
nullptr; current = current->m_parent)
4064 switch (current->m_parent->type())
4068 for (std::size_t i = 0; i < current->m_parent->m_value.array->size(); ++i)
4070 if (¤t->m_parent->m_value.array->operator[](i) == current)
4081 for (
const auto& element : *current->m_parent->m_value.object)
4083 if (&element.second == current)
4085 tokens.emplace_back(element.first.c_str());
4110 auto str = std::accumulate(tokens.rbegin(), tokens.rend(), std::string{},
4111 [](
const std::string & a,
const std::string & b)
4113 return concat(a,
'/', detail::escape(b));
4115 return concat(
'(', str,
") ");
4117 static_cast<void>(leaf_element);
4124 std::runtime_error m;
4141 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value,
int> = 0>
4149 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value,
int> = 0>
4150 static parse_error create(
int id_, std::size_t byte_,
const std::string& what_arg, BasicJsonContext context)
4155 return {id_, byte_, w.c_str()};
4170 parse_error(
int id_, std::size_t byte_,
const char* what_arg)
4173 static std::string position_string(
const position_t& pos)
4185 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value,
int> = 0>
4189 return {id_, w.c_str()};
4203 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value,
int> = 0>
4207 return {id_, w.c_str()};
4220 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value,
int> = 0>
4224 return {id_, w.c_str()};
4237 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value,
int> = 0>
4241 return {id_, w.c_str()};
4275 #if JSON_HAS_EXPERIMENTAL_FILESYSTEM
4276 #include <experimental/filesystem>
4279 namespace std_fs = std::experimental::filesystem;
4281 #elif JSON_HAS_FILESYSTEM
4282 #include <filesystem>
4285 namespace std_fs = std::filesystem;
4293 template<
typename BasicJsonType>
4294 inline void from_json(
const BasicJsonType& j,
typename std::nullptr_t& n)
4304 template <
typename BasicJsonType,
typename ArithmeticType,
4305 enable_if_t < std::is_arithmetic<ArithmeticType>::value&&
4306 !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value,
4310 switch (
static_cast<value_t>(j))
4314 val =
static_cast<ArithmeticType
>(*j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>());
4319 val =
static_cast<ArithmeticType
>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());
4324 val =
static_cast<ArithmeticType
>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());
4340 template<
typename BasicJsonType>
4341 inline void from_json(
const BasicJsonType& j,
typename BasicJsonType::boolean_t& b)
4347 b = *j.template get_ptr<const typename BasicJsonType::boolean_t*>();
4350 template<
typename BasicJsonType>
4351 inline void from_json(
const BasicJsonType& j,
typename BasicJsonType::string_t& s)
4357 s = *j.template get_ptr<const typename BasicJsonType::string_t*>();
4361 typename BasicJsonType,
typename StringType,
4363 std::is_assignable<StringType&, const typename BasicJsonType::string_t>::value
4364 && !std::is_same<typename BasicJsonType::string_t, StringType>::value
4365 && !is_json_ref<StringType>::value,
int > = 0 >
4366 inline void from_json(
const BasicJsonType& j, StringType& s)
4373 s = *j.template get_ptr<const typename BasicJsonType::string_t*>();
4376 template<
typename BasicJsonType>
4377 inline void from_json(
const BasicJsonType& j,
typename BasicJsonType::number_float_t& val)
4382 template<
typename BasicJsonType>
4383 inline void from_json(
const BasicJsonType& j,
typename BasicJsonType::number_unsigned_t& val)
4388 template<
typename BasicJsonType>
4389 inline void from_json(
const BasicJsonType& j,
typename BasicJsonType::number_integer_t& val)
4394 #if !JSON_DISABLE_ENUM_SERIALIZATION
4395 template<
typename BasicJsonType,
typename EnumType,
4396 enable_if_t<std::is_enum<EnumType>::value,
int> = 0>
4401 e =
static_cast<EnumType
>(val);
4406 template<
typename BasicJsonType,
typename T,
typename Allocator,
4407 enable_if_t<is_getable<BasicJsonType, T>::value,
int> = 0>
4408 inline void from_json(
const BasicJsonType& j, std::forward_list<T, Allocator>& l)
4415 std::transform(j.rbegin(), j.rend(),
4416 std::front_inserter(l), [](
const BasicJsonType & i)
4418 return i.template get<T>();
4423 template<
typename BasicJsonType,
typename T,
4424 enable_if_t<is_getable<BasicJsonType, T>::value,
int> = 0>
4425 inline void from_json(
const BasicJsonType& j, std::valarray<T>& l)
4432 std::transform(j.begin(), j.end(), std::begin(l),
4433 [](
const BasicJsonType & elem)
4435 return elem.template get<T>();
4439 template<
typename BasicJsonType,
typename T, std::
size_t N>
4441 -> decltype(j.template get<T>(),
void())
4443 for (std::size_t i = 0; i < N; ++i)
4445 arr[i] = j.at(i).template get<T>();
4449 template<
typename BasicJsonType>
4452 arr = *j.template get_ptr<const typename BasicJsonType::array_t*>();
4455 template<
typename BasicJsonType,
typename T, std::
size_t N>
4458 -> decltype(j.template get<T>(),
void())
4460 for (std::size_t i = 0; i < N; ++i)
4462 arr[i] = j.at(i).template get<T>();
4466 template<
typename BasicJsonType,
typename ConstructibleArrayType,
4468 std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value,
4472 arr.reserve(std::declval<typename ConstructibleArrayType::size_type>()),
4473 j.template get<typename ConstructibleArrayType::value_type>(),
4478 ConstructibleArrayType ret;
4479 ret.reserve(j.size());
4480 std::transform(j.begin(), j.end(),
4481 std::inserter(ret, end(ret)), [](
const BasicJsonType & i)
4485 return i.template get<typename ConstructibleArrayType::value_type>();
4487 arr = std::move(ret);
4490 template<
typename BasicJsonType,
typename ConstructibleArrayType,
4492 std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value,
4499 ConstructibleArrayType ret;
4501 j.begin(), j.end(), std::inserter(ret, end(ret)),
4502 [](
const BasicJsonType & i)
4506 return i.template get<typename ConstructibleArrayType::value_type>();
4508 arr = std::move(ret);
4511 template <
typename BasicJsonType,
typename ConstructibleArrayType,
4513 is_constructible_array_type<BasicJsonType, ConstructibleArrayType>::value&&
4514 !is_constructible_object_type<BasicJsonType, ConstructibleArrayType>::value&&
4516 !std::is_same<ConstructibleArrayType, typename BasicJsonType::binary_t>::value&&
4517 !is_basic_json<ConstructibleArrayType>::value,
4519 auto from_json(
const BasicJsonType& j, ConstructibleArrayType& arr)
4521 j.template get<typename ConstructibleArrayType::value_type>(),
4532 template <
typename BasicJsonType,
typename T, std::size_t... Idx >
4536 return { { std::forward<BasicJsonType>(j).at(Idx).template get<T>()... } };
4539 template <
typename BasicJsonType,
typename T, std::
size_t N >
4551 template<
typename BasicJsonType>
4552 inline void from_json(
const BasicJsonType& j,
typename BasicJsonType::binary_t& bin)
4559 bin = *j.template get_ptr<const typename BasicJsonType::binary_t*>();
4562 template<
typename BasicJsonType,
typename ConstructibleObjectType,
4563 enable_if_t<is_constructible_object_type<BasicJsonType, ConstructibleObjectType>::value,
int> = 0>
4564 inline void from_json(
const BasicJsonType& j, ConstructibleObjectType& obj)
4571 ConstructibleObjectType ret;
4572 const auto* inner_object = j.template get_ptr<const typename BasicJsonType::object_t*>();
4573 using value_type =
typename ConstructibleObjectType::value_type;
4575 inner_object->begin(), inner_object->end(),
4576 std::inserter(ret, ret.begin()),
4577 [](
typename BasicJsonType::object_t::value_type
const & p)
4579 return value_type(p.first, p.second.template get<typename ConstructibleObjectType::mapped_type>());
4581 obj = std::move(ret);
4588 template <
typename BasicJsonType,
typename ArithmeticType,
4590 std::is_arithmetic<ArithmeticType>::value&&
4591 !std::is_same<ArithmeticType, typename BasicJsonType::number_unsigned_t>::value&&
4592 !std::is_same<ArithmeticType, typename BasicJsonType::number_integer_t>::value&&
4593 !std::is_same<ArithmeticType, typename BasicJsonType::number_float_t>::value&&
4594 !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value,
4596 inline void from_json(
const BasicJsonType& j, ArithmeticType& val)
4598 switch (
static_cast<value_t>(j))
4602 val =
static_cast<ArithmeticType
>(*j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>());
4607 val =
static_cast<ArithmeticType
>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());
4612 val =
static_cast<ArithmeticType
>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());
4617 val =
static_cast<ArithmeticType
>(*j.template get_ptr<const typename BasicJsonType::boolean_t*>());
4632 template<
typename BasicJsonType,
typename... Args, std::size_t... Idx>
4635 return std::make_tuple(std::forward<BasicJsonType>(j).at(Idx).
template get<Args>()...);
4638 template <
typename BasicJsonType,
class A1,
class A2 >
4641 return {std::forward<BasicJsonType>(j).at(0).template get<A1>(),
4642 std::forward<BasicJsonType>(j).at(1).template get<A2>()};
4645 template<
typename BasicJsonType,
typename A1,
typename A2>
4651 template<
typename BasicJsonType,
typename... Args>
4657 template<
typename BasicJsonType,
typename... Args>
4663 template<
typename BasicJsonType,
typename TupleRelated>
4672 return from_json_tuple_impl(std::forward<BasicJsonType>(j), std::forward<TupleRelated>(t), priority_tag<3> {});
4675 template <
typename BasicJsonType,
typename Key,
typename Value,
typename Compare,
typename Allocator,
4677 typename BasicJsonType::string_t, Key >::value >>
4678 inline void from_json(
const BasicJsonType& j, std::map<Key, Value, Compare, Allocator>& m)
4685 for (
const auto& p : j)
4691 m.emplace(p.at(0).template get<Key>(), p.at(1).template get<Value>());
4695 template <
typename BasicJsonType,
typename Key,
typename Value,
typename Hash,
typename KeyEqual,
typename Allocator,
4697 typename BasicJsonType::string_t, Key >::value >>
4698 inline void from_json(
const BasicJsonType& j, std::unordered_map<Key, Value, Hash, KeyEqual, Allocator>& m)
4705 for (
const auto& p : j)
4711 m.emplace(p.at(0).template get<Key>(), p.at(1).template get<Value>());
4715 #if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM
4716 template<
typename BasicJsonType>
4717 inline void from_json(
const BasicJsonType& j, std_fs::path& p)
4723 p = *j.template get_ptr<const typename BasicJsonType::string_t*>();
4729 template<
typename BasicJsonType,
typename T>
4731 noexcept(noexcept(
from_json(j, std::forward<T>(val))))
4732 -> decltype(
from_json(j, std::forward<T>(val)))
4734 return from_json(j, std::forward<T>(val));
4739 #ifndef JSON_HAS_CPP_17
4748 #ifndef JSON_HAS_CPP_17
4756 #include <algorithm>
4760 #include <type_traits>
4789 template<
typename string_type>
4804 using string_type =
typename std::remove_cv< typename std::remove_reference<decltype( std::declval<IteratorType>().
key() ) >::
type >::
type;
4808 IteratorType anchor{};
4810 std::size_t array_index = 0;
4812 mutable std::size_t array_index_last = 0;
4821 noexcept(
std::is_nothrow_move_constructible<IteratorType>::
value
4823 : anchor(
std::move(it))
4824 , array_index(array_index_)
4831 noexcept(
std::is_nothrow_move_constructible<IteratorType>::
value
4834 noexcept(
std::is_nothrow_move_assignable<IteratorType>::
value
4864 return anchor == o.anchor;
4870 return anchor != o.anchor;
4878 switch (anchor.m_object->type())
4883 if (array_index != array_index_last)
4886 array_index_last = array_index;
4888 return array_index_str;
4893 return anchor.key();
4910 typename IteratorType::reference
value()
const
4912 return anchor.value();
4921 typename IteratorType::pointer container =
nullptr;
4928 : container(&cont) {}
4952 template<std::
size_t N,
typename IteratorType, enable_if_t<N == 0,
int> = 0>
4960 template<std::
size_t N,
typename IteratorType, enable_if_t<N == 1,
int> = 0>
4974 #if defined(__clang__)
4976 #pragma clang diagnostic push
4977 #pragma clang diagnostic ignored "-Wmismatched-tags"
4979 template<
typename IteratorType>
4981 :
public std::integral_constant<std::size_t, 2> {};
4983 template<std::
size_t N,
typename IteratorType>
4988 get<N>(std::declval <
4991 #if defined(__clang__)
4992 #pragma clang diagnostic pop
4997 template <
typename IteratorType>
4998 inline constexpr bool ::std::ranges::enable_borrowed_range<::nlohmann::detail::iteration_proxy<IteratorType>> =
true;
5008 #if JSON_HAS_EXPERIMENTAL_FILESYSTEM
5009 #include <experimental/filesystem>
5012 namespace std_fs = std::experimental::filesystem;
5014 #elif JSON_HAS_FILESYSTEM
5015 #include <filesystem>
5018 namespace std_fs = std::filesystem;
5042 template<
typename BasicJsonType>
5043 static void construct(BasicJsonType& j,
typename BasicJsonType::boolean_t b) noexcept
5045 j.m_value.destroy(j.m_type);
5048 j.assert_invariant();
5055 template<
typename BasicJsonType>
5056 static void construct(BasicJsonType& j,
const typename BasicJsonType::string_t& s)
5058 j.m_value.destroy(j.m_type);
5061 j.assert_invariant();
5064 template<
typename BasicJsonType>
5065 static void construct(BasicJsonType& j,
typename BasicJsonType::string_t&& s)
5067 j.m_value.destroy(j.m_type);
5069 j.m_value = std::move(s);
5070 j.assert_invariant();
5073 template <
typename BasicJsonType,
typename CompatibleStringType,
5076 static void construct(BasicJsonType& j,
const CompatibleStringType& str)
5078 j.m_value.destroy(j.m_type);
5080 j.m_value.string = j.template create<typename BasicJsonType::string_t>(str);
5081 j.assert_invariant();
5088 template<
typename BasicJsonType>
5089 static void construct(BasicJsonType& j,
const typename BasicJsonType::binary_t& b)
5091 j.m_value.destroy(j.m_type);
5093 j.m_value =
typename BasicJsonType::binary_t(b);
5094 j.assert_invariant();
5097 template<
typename BasicJsonType>
5098 static void construct(BasicJsonType& j,
typename BasicJsonType::binary_t&& b)
5100 j.m_value.destroy(j.m_type);
5102 j.m_value =
typename BasicJsonType::binary_t(std::move(b));
5103 j.assert_invariant();
5110 template<
typename BasicJsonType>
5111 static void construct(BasicJsonType& j,
typename BasicJsonType::number_float_t val) noexcept
5113 j.m_value.destroy(j.m_type);
5116 j.assert_invariant();
5123 template<
typename BasicJsonType>
5124 static void construct(BasicJsonType& j,
typename BasicJsonType::number_unsigned_t val) noexcept
5126 j.m_value.destroy(j.m_type);
5129 j.assert_invariant();
5136 template<
typename BasicJsonType>
5137 static void construct(BasicJsonType& j,
typename BasicJsonType::number_integer_t val) noexcept
5139 j.m_value.destroy(j.m_type);
5142 j.assert_invariant();
5149 template<
typename BasicJsonType>
5150 static void construct(BasicJsonType& j,
const typename BasicJsonType::array_t& arr)
5152 j.m_value.destroy(j.m_type);
5156 j.assert_invariant();
5159 template<
typename BasicJsonType>
5160 static void construct(BasicJsonType& j,
typename BasicJsonType::array_t&& arr)
5162 j.m_value.destroy(j.m_type);
5164 j.m_value = std::move(arr);
5166 j.assert_invariant();
5169 template <
typename BasicJsonType,
typename CompatibleArrayType,
5172 static void construct(BasicJsonType& j,
const CompatibleArrayType& arr)
5177 j.m_value.destroy(j.m_type);
5179 j.m_value.array = j.template create<typename BasicJsonType::array_t>(begin(arr), end(arr));
5181 j.assert_invariant();
5184 template<
typename BasicJsonType>
5185 static void construct(BasicJsonType& j,
const std::vector<bool>& arr)
5187 j.m_value.destroy(j.m_type);
5190 j.m_value.array->reserve(arr.size());
5191 for (
const bool x : arr)
5193 j.m_value.array->push_back(x);
5194 j.set_parent(j.m_value.array->back());
5196 j.assert_invariant();
5199 template<
typename BasicJsonType,
typename T,
5201 static void construct(BasicJsonType& j,
const std::valarray<T>& arr)
5203 j.m_value.destroy(j.m_type);
5206 j.m_value.array->resize(arr.size());
5209 std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin());
5212 j.assert_invariant();
5219 template<
typename BasicJsonType>
5220 static void construct(BasicJsonType& j,
const typename BasicJsonType::object_t& obj)
5222 j.m_value.destroy(j.m_type);
5226 j.assert_invariant();
5229 template<
typename BasicJsonType>
5230 static void construct(BasicJsonType& j,
typename BasicJsonType::object_t&& obj)
5232 j.m_value.destroy(j.m_type);
5234 j.m_value = std::move(obj);
5236 j.assert_invariant();
5239 template <
typename BasicJsonType,
typename CompatibleObjectType,
5241 static void construct(BasicJsonType& j,
const CompatibleObjectType& obj)
5246 j.m_value.destroy(j.m_type);
5248 j.m_value.object = j.template create<typename BasicJsonType::object_t>(begin(obj), end(obj));
5250 j.assert_invariant();
5258 template<
typename BasicJsonType,
typename T,
5259 enable_if_t<std::is_same<T, typename BasicJsonType::boolean_t>::value,
int> = 0>
5260 inline void to_json(BasicJsonType& j, T b) noexcept
5265 template<
typename BasicJsonType,
5266 enable_if_t<std::is_convertible<const std::vector<bool>::reference&,
typename BasicJsonType::boolean_t>::value,
int> = 0>
5267 inline void to_json(BasicJsonType& j,
const std::vector<bool>::reference& b) noexcept
5272 template<
typename BasicJsonType,
typename CompatibleString,
5273 enable_if_t<std::is_constructible<typename BasicJsonType::string_t, CompatibleString>::value,
int> = 0>
5274 inline void to_json(BasicJsonType& j,
const CompatibleString& s)
5279 template<
typename BasicJsonType>
5280 inline void to_json(BasicJsonType& j,
typename BasicJsonType::string_t&& s)
5285 template<
typename BasicJsonType,
typename FloatType,
5286 enable_if_t<std::is_floating_point<FloatType>::value,
int> = 0>
5287 inline void to_json(BasicJsonType& j, FloatType val) noexcept
5292 template<
typename BasicJsonType,
typename CompatibleNumberUnsignedType,
5293 enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_unsigned_t, CompatibleNumberUnsignedType>::value,
int> = 0>
5294 inline void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept
5299 template<
typename BasicJsonType,
typename CompatibleNumberIntegerType,
5300 enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_integer_t, CompatibleNumberIntegerType>::value,
int> = 0>
5301 inline void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept
5306 #if !JSON_DISABLE_ENUM_SERIALIZATION
5307 template<
typename BasicJsonType,
typename EnumType,
5308 enable_if_t<std::is_enum<EnumType>::value,
int> = 0>
5309 inline void to_json(BasicJsonType& j, EnumType e) noexcept
5316 template<
typename BasicJsonType>
5317 inline void to_json(BasicJsonType& j,
const std::vector<bool>& e)
5322 template <
typename BasicJsonType,
typename CompatibleArrayType,
5323 enable_if_t < is_compatible_array_type<BasicJsonType,
5324 CompatibleArrayType>::value&&
5325 !is_compatible_object_type<BasicJsonType, CompatibleArrayType>::value&&
5327 !std::is_same<typename BasicJsonType::binary_t, CompatibleArrayType>::value&&
5328 !is_basic_json<CompatibleArrayType>::value,
5330 inline void to_json(BasicJsonType& j,
const CompatibleArrayType& arr)
5335 template<
typename BasicJsonType>
5336 inline void to_json(BasicJsonType& j,
const typename BasicJsonType::binary_t& bin)
5341 template<
typename BasicJsonType,
typename T,
5342 enable_if_t<std::is_convertible<T, BasicJsonType>::value,
int> = 0>
5343 inline void to_json(BasicJsonType& j,
const std::valarray<T>& arr)
5348 template<
typename BasicJsonType>
5349 inline void to_json(BasicJsonType& j,
typename BasicJsonType::array_t&& arr)
5354 template <
typename BasicJsonType,
typename CompatibleObjectType,
5355 enable_if_t < is_compatible_object_type<BasicJsonType, CompatibleObjectType>::value&& !is_basic_json<CompatibleObjectType>::value,
int > = 0 >
5356 inline void to_json(BasicJsonType& j,
const CompatibleObjectType& obj)
5361 template<
typename BasicJsonType>
5362 inline void to_json(BasicJsonType& j,
typename BasicJsonType::object_t&& obj)
5368 typename BasicJsonType,
typename T, std::size_t N,
5369 enable_if_t < !std::is_constructible<
typename BasicJsonType::string_t,
5370 const T(&)[N]>::value,
5372 inline void to_json(BasicJsonType& j,
const T(&arr)[N])
5377 template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible<BasicJsonType, T1>::value&& std::is_constructible<BasicJsonType, T2>::value,
int > = 0 >
5378 inline void to_json(BasicJsonType& j,
const std::pair<T1, T2>& p)
5380 j = { p.first, p.second };
5384 template<
typename BasicJsonType,
typename T,
5385 enable_if_t<std::is_same<T, iteration_proxy_value<typename BasicJsonType::iterator>>::value,
int> = 0>
5388 j = { {b.key(), b.value()} };
5391 template<
typename BasicJsonType,
typename Tuple, std::size_t... Idx>
5394 j = { std::get<Idx>(t)... };
5397 template<typename BasicJsonType, typename T, enable_if_t<is_constructible_tuple<BasicJsonType, T>::value,
int > = 0>
5398 inline void to_json(BasicJsonType& j,
const T& t)
5403 #if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM
5404 template<
typename BasicJsonType>
5405 inline void to_json(BasicJsonType& j,
const std_fs::path& p)
5413 template<
typename BasicJsonType,
typename T>
5414 auto operator()(BasicJsonType& j, T&& val)
const noexcept(noexcept(
to_json(j, std::forward<T>(val))))
5415 -> decltype(
to_json(j, std::forward<T>(val)),
void())
5417 return to_json(j, std::forward<T>(val));
5422 #ifndef JSON_HAS_CPP_17
5431 #ifndef JSON_HAS_CPP_17
5445 template<
typename ValueType,
typename>
5450 template<
typename BasicJsonType,
typename TargetType = ValueType>
5451 static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
5460 template<
typename BasicJsonType,
typename TargetType = ValueType>
5470 template<
typename BasicJsonType,
typename TargetType = ValueType>
5471 static auto to_json(BasicJsonType& j, TargetType && val) noexcept(
5492 template<
typename BinaryType>
5517 , m_subtype(subtype_)
5518 , m_has_subtype(true)
5524 , m_subtype(subtype_)
5525 , m_has_subtype(true)
5530 return std::tie(
static_cast<const BinaryType&
>(*
this), m_subtype, m_has_subtype) ==
5531 std::tie(
static_cast<const BinaryType&
>(rhs), rhs.m_subtype, rhs.m_has_subtype);
5536 return !(rhs == *
this);
5543 m_subtype = subtype_;
5544 m_has_subtype =
true;
5551 return m_has_subtype ? m_subtype :
static_cast<subtype_type>(-1);
5558 return m_has_subtype;
5566 m_has_subtype =
false;
5571 bool m_has_subtype =
false;
5587 #include <functional>
5600 inline std::size_t
combine(std::size_t seed, std::size_t h) noexcept
5602 seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U);
5617 template<
typename BasicJsonType>
5618 std::size_t
hash(
const BasicJsonType& j)
5620 using string_t =
typename BasicJsonType::string_t;
5621 using number_integer_t =
typename BasicJsonType::number_integer_t;
5622 using number_unsigned_t =
typename BasicJsonType::number_unsigned_t;
5623 using number_float_t =
typename BasicJsonType::number_float_t;
5625 const auto type =
static_cast<std::size_t
>(j.type());
5628 case BasicJsonType::value_t::null:
5629 case BasicJsonType::value_t::discarded:
5634 case BasicJsonType::value_t::object:
5637 for (
const auto& element : j.items())
5639 const auto h = std::hash<string_t> {}(element.key());
5646 case BasicJsonType::value_t::array:
5649 for (
const auto& element : j)
5656 case BasicJsonType::value_t::string:
5658 const auto h = std::hash<string_t> {}(j.template get_ref<const string_t&>());
5662 case BasicJsonType::value_t::boolean:
5664 const auto h = std::hash<bool> {}(j.template get<bool>());
5668 case BasicJsonType::value_t::number_integer:
5670 const auto h = std::hash<number_integer_t> {}(j.template get<number_integer_t>());
5674 case BasicJsonType::value_t::number_unsigned:
5676 const auto h = std::hash<number_unsigned_t> {}(j.template get<number_unsigned_t>());
5680 case BasicJsonType::value_t::number_float:
5682 const auto h = std::hash<number_float_t> {}(j.template get<number_float_t>());
5686 case BasicJsonType::value_t::binary:
5689 const auto h = std::hash<bool> {}(j.get_binary().has_subtype());
5691 seed =
combine(seed,
static_cast<std::size_t
>(j.get_binary().subtype()));
5692 for (
const auto byte : j.get_binary())
5694 seed =
combine(seed, std::hash<std::uint8_t> {}(
byte));
5711 #include <algorithm>
5737 #include <type_traits>
5785 return std::fgetc(m_file);
5814 is->clear(is->rdstate() & std::ios::eofbit);
5819 : is(&i), sb(i.rdbuf())
5828 : is(rhs.is), sb(rhs.sb)
5839 auto res = sb->sbumpc();
5843 is->clear(is->rdstate() | std::ios::eofbit);
5850 std::istream* is =
nullptr;
5851 std::streambuf* sb =
nullptr;