Coverage Report

Created: 2023-11-19 06:14

/src/json/single_include/nlohmann/json.hpp
Line
Count
Source (jump to first uncovered line)
1
//     __ _____ _____ _____
2
//  __|  |   __|     |   | |  JSON for Modern C++
3
// |  |  |__   |  |  | | | |  version 3.11.2
4
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
5
//
6
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
7
// SPDX-License-Identifier: MIT
8
9
/****************************************************************************\
10
 * Note on documentation: The source files contain links to the online      *
11
 * documentation of the public API at https://json.nlohmann.me. This URL    *
12
 * contains the most recent documentation and should also be applicable to  *
13
 * previous versions; documentation for deprecated functions is not         *
14
 * removed, but marked deprecated. See "Generate documentation" section in  *
15
 * file docs/README.md.                                                     *
16
\****************************************************************************/
17
18
#ifndef INCLUDE_NLOHMANN_JSON_HPP_
19
#define INCLUDE_NLOHMANN_JSON_HPP_
20
21
#include <algorithm> // all_of, find, for_each
22
#include <cstddef> // nullptr_t, ptrdiff_t, size_t
23
#include <functional> // hash, less
24
#include <initializer_list> // initializer_list
25
#ifndef JSON_NO_IO
26
    #include <iosfwd> // istream, ostream
27
#endif  // JSON_NO_IO
28
#include <iterator> // random_access_iterator_tag
29
#include <memory> // unique_ptr
30
#include <string> // string, stoi, to_string
31
#include <utility> // declval, forward, move, pair, swap
32
#include <vector> // vector
33
34
// #include <nlohmann/adl_serializer.hpp>
35
//     __ _____ _____ _____
36
//  __|  |   __|     |   | |  JSON for Modern C++
37
// |  |  |__   |  |  | | | |  version 3.11.2
38
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
39
//
40
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
41
// SPDX-License-Identifier: MIT
42
43
44
45
#include <utility>
46
47
// #include <nlohmann/detail/abi_macros.hpp>
48
//     __ _____ _____ _____
49
//  __|  |   __|     |   | |  JSON for Modern C++
50
// |  |  |__   |  |  | | | |  version 3.11.2
51
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
52
//
53
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
54
// SPDX-License-Identifier: MIT
55
56
57
58
// This file contains all macro definitions affecting or depending on the ABI
59
60
#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK
61
    #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH)
62
        #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 2
63
            #warning "Already included a different version of the library!"
64
        #endif
65
    #endif
66
#endif
67
68
#define NLOHMANN_JSON_VERSION_MAJOR 3   // NOLINT(modernize-macro-to-enum)
69
#define NLOHMANN_JSON_VERSION_MINOR 11  // NOLINT(modernize-macro-to-enum)
70
#define NLOHMANN_JSON_VERSION_PATCH 2   // NOLINT(modernize-macro-to-enum)
71
72
#ifndef JSON_DIAGNOSTICS
73
    #define JSON_DIAGNOSTICS 0
74
#endif
75
76
#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
77
    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
78
#endif
79
80
#if JSON_DIAGNOSTICS
81
    #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag
82
#else
83
    #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS
84
#endif
85
86
#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
87
    #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp
88
#else
89
    #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON
90
#endif
91
92
#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION
93
    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0
94
#endif
95
96
// Construct the namespace ABI tags component
97
#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b
98
#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \
99
    NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)
100
101
#define NLOHMANN_JSON_ABI_TAGS                                       \
102
    NLOHMANN_JSON_ABI_TAGS_CONCAT(                                   \
103
            NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS,                       \
104
            NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)
105
106
// Construct the namespace version component
107
#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \
108
    _v ## major ## _ ## minor ## _ ## patch
109
#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \
110
    NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
111
112
#if NLOHMANN_JSON_NAMESPACE_NO_VERSION
113
#define NLOHMANN_JSON_NAMESPACE_VERSION
114
#else
115
#define NLOHMANN_JSON_NAMESPACE_VERSION                                 \
116
    NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \
117
                                           NLOHMANN_JSON_VERSION_MINOR, \
118
                                           NLOHMANN_JSON_VERSION_PATCH)
119
#endif
120
121
// Combine namespace components
122
#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b
123
#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \
124
    NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
125
126
#ifndef NLOHMANN_JSON_NAMESPACE
127
#define NLOHMANN_JSON_NAMESPACE               \
128
    nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \
129
            NLOHMANN_JSON_ABI_TAGS,           \
130
            NLOHMANN_JSON_NAMESPACE_VERSION)
131
#endif
132
133
#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN
134
#define NLOHMANN_JSON_NAMESPACE_BEGIN                \
135
    namespace nlohmann                               \
136
    {                                                \
137
    inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \
138
                NLOHMANN_JSON_ABI_TAGS,              \
139
                NLOHMANN_JSON_NAMESPACE_VERSION)     \
140
    {
141
#endif
142
143
#ifndef NLOHMANN_JSON_NAMESPACE_END
144
#define NLOHMANN_JSON_NAMESPACE_END                                     \
145
    }  /* namespace (inline namespace) NOLINT(readability/namespace) */ \
146
    }  // namespace nlohmann
147
#endif
148
149
// #include <nlohmann/detail/conversions/from_json.hpp>
150
//     __ _____ _____ _____
151
//  __|  |   __|     |   | |  JSON for Modern C++
152
// |  |  |__   |  |  | | | |  version 3.11.2
153
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
154
//
155
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
156
// SPDX-License-Identifier: MIT
157
158
159
160
#include <algorithm> // transform
161
#include <array> // array
162
#include <forward_list> // forward_list
163
#include <iterator> // inserter, front_inserter, end
164
#include <map> // map
165
#include <string> // string
166
#include <tuple> // tuple, make_tuple
167
#include <type_traits> // is_arithmetic, is_same, is_enum, underlying_type, is_convertible
168
#include <unordered_map> // unordered_map
169
#include <utility> // pair, declval
170
#include <valarray> // valarray
171
172
// #include <nlohmann/detail/exceptions.hpp>
173
//     __ _____ _____ _____
174
//  __|  |   __|     |   | |  JSON for Modern C++
175
// |  |  |__   |  |  | | | |  version 3.11.2
176
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
177
//
178
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
179
// SPDX-License-Identifier: MIT
180
181
182
183
#include <cstddef> // nullptr_t
184
#include <exception> // exception
185
#if JSON_DIAGNOSTICS
186
    #include <numeric> // accumulate
187
#endif
188
#include <stdexcept> // runtime_error
189
#include <string> // to_string
190
#include <vector> // vector
191
192
// #include <nlohmann/detail/value_t.hpp>
193
//     __ _____ _____ _____
194
//  __|  |   __|     |   | |  JSON for Modern C++
195
// |  |  |__   |  |  | | | |  version 3.11.2
196
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
197
//
198
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
199
// SPDX-License-Identifier: MIT
200
201
202
203
#include <array> // array
204
#include <cstddef> // size_t
205
#include <cstdint> // uint8_t
206
#include <string> // string
207
208
// #include <nlohmann/detail/macro_scope.hpp>
209
//     __ _____ _____ _____
210
//  __|  |   __|     |   | |  JSON for Modern C++
211
// |  |  |__   |  |  | | | |  version 3.11.2
212
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
213
//
214
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
215
// SPDX-License-Identifier: MIT
216
217
218
219
#include <utility> // declval, pair
220
// #include <nlohmann/detail/meta/detected.hpp>
221
//     __ _____ _____ _____
222
//  __|  |   __|     |   | |  JSON for Modern C++
223
// |  |  |__   |  |  | | | |  version 3.11.2
224
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
225
//
226
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
227
// SPDX-License-Identifier: MIT
228
229
230
231
#include <type_traits>
232
233
// #include <nlohmann/detail/meta/void_t.hpp>
234
//     __ _____ _____ _____
235
//  __|  |   __|     |   | |  JSON for Modern C++
236
// |  |  |__   |  |  | | | |  version 3.11.2
237
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
238
//
239
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
240
// SPDX-License-Identifier: MIT
241
242
243
244
// #include <nlohmann/detail/abi_macros.hpp>
245
246
247
NLOHMANN_JSON_NAMESPACE_BEGIN
248
namespace detail
249
{
250
251
template<typename ...Ts> struct make_void
252
{
253
    using type = void;
254
};
255
template<typename ...Ts> using void_t = typename make_void<Ts...>::type;
256
257
}  // namespace detail
258
NLOHMANN_JSON_NAMESPACE_END
259
260
261
NLOHMANN_JSON_NAMESPACE_BEGIN
262
namespace detail
263
{
264
265
// https://en.cppreference.com/w/cpp/experimental/is_detected
266
struct nonesuch
267
{
268
    nonesuch() = delete;
269
    ~nonesuch() = delete;
270
    nonesuch(nonesuch const&) = delete;
271
    nonesuch(nonesuch const&&) = delete;
272
    void operator=(nonesuch const&) = delete;
273
    void operator=(nonesuch&&) = delete;
274
};
275
276
template<class Default,
277
         class AlwaysVoid,
278
         template<class...> class Op,
279
         class... Args>
280
struct detector
281
{
282
    using value_t = std::false_type;
283
    using type = Default;
284
};
285
286
template<class Default, template<class...> class Op, class... Args>
287
struct detector<Default, void_t<Op<Args...>>, Op, Args...>
288
{
289
    using value_t = std::true_type;
290
    using type = Op<Args...>;
291
};
292
293
template<template<class...> class Op, class... Args>
294
using is_detected = typename detector<nonesuch, void, Op, Args...>::value_t;
295
296
template<template<class...> class Op, class... Args>
297
struct is_detected_lazy : is_detected<Op, Args...> { };
298
299
template<template<class...> class Op, class... Args>
300
using detected_t = typename detector<nonesuch, void, Op, Args...>::type;
301
302
template<class Default, template<class...> class Op, class... Args>
303
using detected_or = detector<Default, void, Op, Args...>;
304
305
template<class Default, template<class...> class Op, class... Args>
306
using detected_or_t = typename detected_or<Default, Op, Args...>::type;
307
308
template<class Expected, template<class...> class Op, class... Args>
309
using is_detected_exact = std::is_same<Expected, detected_t<Op, Args...>>;
310
311
template<class To, template<class...> class Op, class... Args>
312
using is_detected_convertible =
313
    std::is_convertible<detected_t<Op, Args...>, To>;
314
315
}  // namespace detail
316
NLOHMANN_JSON_NAMESPACE_END
317
318
// #include <nlohmann/thirdparty/hedley/hedley.hpp>
319
320
321
//     __ _____ _____ _____
322
//  __|  |   __|     |   | |  JSON for Modern C++
323
// |  |  |__   |  |  | | | |  version 3.11.2
324
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
325
//
326
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
327
// SPDX-FileCopyrightText: 2016-2021 Evan Nemerson <evan@nemerson.com>
328
// SPDX-License-Identifier: MIT
329
330
/* Hedley - https://nemequ.github.io/hedley
331
 * Created by Evan Nemerson <evan@nemerson.com>
332
 */
333
334
#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15)
335
#if defined(JSON_HEDLEY_VERSION)
336
    #undef JSON_HEDLEY_VERSION
337
#endif
338
#define JSON_HEDLEY_VERSION 15
339
340
#if defined(JSON_HEDLEY_STRINGIFY_EX)
341
    #undef JSON_HEDLEY_STRINGIFY_EX
342
#endif
343
#define JSON_HEDLEY_STRINGIFY_EX(x) #x
344
345
#if defined(JSON_HEDLEY_STRINGIFY)
346
    #undef JSON_HEDLEY_STRINGIFY
347
#endif
348
#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x)
349
350
#if defined(JSON_HEDLEY_CONCAT_EX)
351
    #undef JSON_HEDLEY_CONCAT_EX
352
#endif
353
#define JSON_HEDLEY_CONCAT_EX(a,b) a##b
354
355
#if defined(JSON_HEDLEY_CONCAT)
356
    #undef JSON_HEDLEY_CONCAT
357
#endif
358
#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b)
359
360
#if defined(JSON_HEDLEY_CONCAT3_EX)
361
    #undef JSON_HEDLEY_CONCAT3_EX
362
#endif
363
#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c
364
365
#if defined(JSON_HEDLEY_CONCAT3)
366
    #undef JSON_HEDLEY_CONCAT3
367
#endif
368
#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c)
369
370
#if defined(JSON_HEDLEY_VERSION_ENCODE)
371
    #undef JSON_HEDLEY_VERSION_ENCODE
372
#endif
373
#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision))
374
375
#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR)
376
    #undef JSON_HEDLEY_VERSION_DECODE_MAJOR
377
#endif
378
#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000)
379
380
#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR)
381
    #undef JSON_HEDLEY_VERSION_DECODE_MINOR
382
#endif
383
#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000)
384
385
#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION)
386
    #undef JSON_HEDLEY_VERSION_DECODE_REVISION
387
#endif
388
#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000)
389
390
#if defined(JSON_HEDLEY_GNUC_VERSION)
391
    #undef JSON_HEDLEY_GNUC_VERSION
392
#endif
393
#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
394
    #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
395
#elif defined(__GNUC__)
396
    #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0)
397
#endif
398
399
#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK)
400
    #undef JSON_HEDLEY_GNUC_VERSION_CHECK
401
#endif
402
#if defined(JSON_HEDLEY_GNUC_VERSION)
403
    #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
404
#else
405
    #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0)
406
#endif
407
408
#if defined(JSON_HEDLEY_MSVC_VERSION)
409
    #undef JSON_HEDLEY_MSVC_VERSION
410
#endif
411
#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL)
412
    #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100)
413
#elif defined(_MSC_FULL_VER) && !defined(__ICL)
414
    #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10)
415
#elif defined(_MSC_VER) && !defined(__ICL)
416
    #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0)
417
#endif
418
419
#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK)
420
    #undef JSON_HEDLEY_MSVC_VERSION_CHECK
421
#endif
422
#if !defined(JSON_HEDLEY_MSVC_VERSION)
423
    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0)
424
#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
425
    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
426
#elif defined(_MSC_VER) && (_MSC_VER >= 1200)
427
    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
428
#else
429
    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor)))
430
#endif
431
432
#if defined(JSON_HEDLEY_INTEL_VERSION)
433
    #undef JSON_HEDLEY_INTEL_VERSION
434
#endif
435
#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL)
436
    #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE)
437
#elif defined(__INTEL_COMPILER) && !defined(__ICL)
438
    #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
439
#endif
440
441
#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK)
442
    #undef JSON_HEDLEY_INTEL_VERSION_CHECK
443
#endif
444
#if defined(JSON_HEDLEY_INTEL_VERSION)
445
    #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
446
#else
447
    #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0)
448
#endif
449
450
#if defined(JSON_HEDLEY_INTEL_CL_VERSION)
451
    #undef JSON_HEDLEY_INTEL_CL_VERSION
452
#endif
453
#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL)
454
    #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0)
455
#endif
456
457
#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK)
458
    #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK
459
#endif
460
#if defined(JSON_HEDLEY_INTEL_CL_VERSION)
461
    #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
462
#else
463
    #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0)
464
#endif
465
466
#if defined(JSON_HEDLEY_PGI_VERSION)
467
    #undef JSON_HEDLEY_PGI_VERSION
468
#endif
469
#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)
470
    #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)
471
#endif
472
473
#if defined(JSON_HEDLEY_PGI_VERSION_CHECK)
474
    #undef JSON_HEDLEY_PGI_VERSION_CHECK
475
#endif
476
#if defined(JSON_HEDLEY_PGI_VERSION)
477
    #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
478
#else
479
    #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0)
480
#endif
481
482
#if defined(JSON_HEDLEY_SUNPRO_VERSION)
483
    #undef JSON_HEDLEY_SUNPRO_VERSION
484
#endif
485
#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
486
    #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)
487
#elif defined(__SUNPRO_C)
488
    #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf)
489
#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
490
    #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)
491
#elif defined(__SUNPRO_CC)
492
    #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf)
493
#endif
494
495
#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK)
496
    #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK
497
#endif
498
#if defined(JSON_HEDLEY_SUNPRO_VERSION)
499
    #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
500
#else
501
    #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0)
502
#endif
503
504
#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)
505
    #undef JSON_HEDLEY_EMSCRIPTEN_VERSION
506
#endif
507
#if defined(__EMSCRIPTEN__)
508
    #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__)
509
#endif
510
511
#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK)
512
    #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK
513
#endif
514
#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)
515
    #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
516
#else
517
    #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0)
518
#endif
519
520
#if defined(JSON_HEDLEY_ARM_VERSION)
521
    #undef JSON_HEDLEY_ARM_VERSION
522
#endif
523
#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
524
    #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100)
525
#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
526
    #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100)
527
#endif
528
529
#if defined(JSON_HEDLEY_ARM_VERSION_CHECK)
530
    #undef JSON_HEDLEY_ARM_VERSION_CHECK
531
#endif
532
#if defined(JSON_HEDLEY_ARM_VERSION)
533
    #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
534
#else
535
    #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0)
536
#endif
537
538
#if defined(JSON_HEDLEY_IBM_VERSION)
539
    #undef JSON_HEDLEY_IBM_VERSION
540
#endif
541
#if defined(__ibmxl__)
542
    #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__)
543
#elif defined(__xlC__) && defined(__xlC_ver__)
544
    #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)
545
#elif defined(__xlC__)
546
    #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0)
547
#endif
548
549
#if defined(JSON_HEDLEY_IBM_VERSION_CHECK)
550
    #undef JSON_HEDLEY_IBM_VERSION_CHECK
551
#endif
552
#if defined(JSON_HEDLEY_IBM_VERSION)
553
    #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
554
#else
555
    #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0)
556
#endif
557
558
#if defined(JSON_HEDLEY_TI_VERSION)
559
    #undef JSON_HEDLEY_TI_VERSION
560
#endif
561
#if \
562
    defined(__TI_COMPILER_VERSION__) && \
563
    ( \
564
      defined(__TMS470__) || defined(__TI_ARM__) || \
565
      defined(__MSP430__) || \
566
      defined(__TMS320C2000__) \
567
    )
568
#if (__TI_COMPILER_VERSION__ >= 16000000)
569
    #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
570
#endif
571
#endif
572
573
#if defined(JSON_HEDLEY_TI_VERSION_CHECK)
574
    #undef JSON_HEDLEY_TI_VERSION_CHECK
575
#endif
576
#if defined(JSON_HEDLEY_TI_VERSION)
577
    #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
578
#else
579
    #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0)
580
#endif
581
582
#if defined(JSON_HEDLEY_TI_CL2000_VERSION)
583
    #undef JSON_HEDLEY_TI_CL2000_VERSION
584
#endif
585
#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__)
586
    #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
587
#endif
588
589
#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK)
590
    #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK
591
#endif
592
#if defined(JSON_HEDLEY_TI_CL2000_VERSION)
593
    #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
594
#else
595
    #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0)
596
#endif
597
598
#if defined(JSON_HEDLEY_TI_CL430_VERSION)
599
    #undef JSON_HEDLEY_TI_CL430_VERSION
600
#endif
601
#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__)
602
    #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
603
#endif
604
605
#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK)
606
    #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK
607
#endif
608
#if defined(JSON_HEDLEY_TI_CL430_VERSION)
609
    #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
610
#else
611
    #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0)
612
#endif
613
614
#if defined(JSON_HEDLEY_TI_ARMCL_VERSION)
615
    #undef JSON_HEDLEY_TI_ARMCL_VERSION
616
#endif
617
#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__))
618
    #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
619
#endif
620
621
#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK)
622
    #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK
623
#endif
624
#if defined(JSON_HEDLEY_TI_ARMCL_VERSION)
625
    #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
626
#else
627
    #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0)
628
#endif
629
630
#if defined(JSON_HEDLEY_TI_CL6X_VERSION)
631
    #undef JSON_HEDLEY_TI_CL6X_VERSION
632
#endif
633
#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__)
634
    #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
635
#endif
636
637
#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK)
638
    #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK
639
#endif
640
#if defined(JSON_HEDLEY_TI_CL6X_VERSION)
641
    #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
642
#else
643
    #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0)
644
#endif
645
646
#if defined(JSON_HEDLEY_TI_CL7X_VERSION)
647
    #undef JSON_HEDLEY_TI_CL7X_VERSION
648
#endif
649
#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__)
650
    #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
651
#endif
652
653
#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK)
654
    #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK
655
#endif
656
#if defined(JSON_HEDLEY_TI_CL7X_VERSION)
657
    #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
658
#else
659
    #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0)
660
#endif
661
662
#if defined(JSON_HEDLEY_TI_CLPRU_VERSION)
663
    #undef JSON_HEDLEY_TI_CLPRU_VERSION
664
#endif
665
#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__)
666
    #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
667
#endif
668
669
#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK)
670
    #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK
671
#endif
672
#if defined(JSON_HEDLEY_TI_CLPRU_VERSION)
673
    #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
674
#else
675
    #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0)
676
#endif
677
678
#if defined(JSON_HEDLEY_CRAY_VERSION)
679
    #undef JSON_HEDLEY_CRAY_VERSION
680
#endif
681
#if defined(_CRAYC)
682
    #if defined(_RELEASE_PATCHLEVEL)
683
        #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL)
684
    #else
685
        #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0)
686
    #endif
687
#endif
688
689
#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK)
690
    #undef JSON_HEDLEY_CRAY_VERSION_CHECK
691
#endif
692
#if defined(JSON_HEDLEY_CRAY_VERSION)
693
    #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
694
#else
695
    #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0)
696
#endif
697
698
#if defined(JSON_HEDLEY_IAR_VERSION)
699
    #undef JSON_HEDLEY_IAR_VERSION
700
#endif
701
#if defined(__IAR_SYSTEMS_ICC__)
702
    #if __VER__ > 1000
703
        #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000))
704
    #else
705
        #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0)
706
    #endif
707
#endif
708
709
#if defined(JSON_HEDLEY_IAR_VERSION_CHECK)
710
    #undef JSON_HEDLEY_IAR_VERSION_CHECK
711
#endif
712
#if defined(JSON_HEDLEY_IAR_VERSION)
713
    #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
714
#else
715
    #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0)
716
#endif
717
718
#if defined(JSON_HEDLEY_TINYC_VERSION)
719
    #undef JSON_HEDLEY_TINYC_VERSION
720
#endif
721
#if defined(__TINYC__)
722
    #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)
723
#endif
724
725
#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK)
726
    #undef JSON_HEDLEY_TINYC_VERSION_CHECK
727
#endif
728
#if defined(JSON_HEDLEY_TINYC_VERSION)
729
    #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
730
#else
731
    #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0)
732
#endif
733
734
#if defined(JSON_HEDLEY_DMC_VERSION)
735
    #undef JSON_HEDLEY_DMC_VERSION
736
#endif
737
#if defined(__DMC__)
738
    #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf)
739
#endif
740
741
#if defined(JSON_HEDLEY_DMC_VERSION_CHECK)
742
    #undef JSON_HEDLEY_DMC_VERSION_CHECK
743
#endif
744
#if defined(JSON_HEDLEY_DMC_VERSION)
745
    #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
746
#else
747
    #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0)
748
#endif
749
750
#if defined(JSON_HEDLEY_COMPCERT_VERSION)
751
    #undef JSON_HEDLEY_COMPCERT_VERSION
752
#endif
753
#if defined(__COMPCERT_VERSION__)
754
    #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100)
755
#endif
756
757
#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK)
758
    #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK
759
#endif
760
#if defined(JSON_HEDLEY_COMPCERT_VERSION)
761
    #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
762
#else
763
    #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0)
764
#endif
765
766
#if defined(JSON_HEDLEY_PELLES_VERSION)
767
    #undef JSON_HEDLEY_PELLES_VERSION
768
#endif
769
#if defined(__POCC__)
770
    #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0)
771
#endif
772
773
#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK)
774
    #undef JSON_HEDLEY_PELLES_VERSION_CHECK
775
#endif
776
#if defined(JSON_HEDLEY_PELLES_VERSION)
777
    #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
778
#else
779
    #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0)
780
#endif
781
782
#if defined(JSON_HEDLEY_MCST_LCC_VERSION)
783
    #undef JSON_HEDLEY_MCST_LCC_VERSION
784
#endif
785
#if defined(__LCC__) && defined(__LCC_MINOR__)
786
    #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__)
787
#endif
788
789
#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK)
790
    #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK
791
#endif
792
#if defined(JSON_HEDLEY_MCST_LCC_VERSION)
793
    #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
794
#else
795
    #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0)
796
#endif
797
798
#if defined(JSON_HEDLEY_GCC_VERSION)
799
    #undef JSON_HEDLEY_GCC_VERSION
800
#endif
801
#if \
802
    defined(JSON_HEDLEY_GNUC_VERSION) && \
803
    !defined(__clang__) && \
804
    !defined(JSON_HEDLEY_INTEL_VERSION) && \
805
    !defined(JSON_HEDLEY_PGI_VERSION) && \
806
    !defined(JSON_HEDLEY_ARM_VERSION) && \
807
    !defined(JSON_HEDLEY_CRAY_VERSION) && \
808
    !defined(JSON_HEDLEY_TI_VERSION) && \
809
    !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \
810
    !defined(JSON_HEDLEY_TI_CL430_VERSION) && \
811
    !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \
812
    !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \
813
    !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \
814
    !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \
815
    !defined(__COMPCERT__) && \
816
    !defined(JSON_HEDLEY_MCST_LCC_VERSION)
817
    #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION
818
#endif
819
820
#if defined(JSON_HEDLEY_GCC_VERSION_CHECK)
821
    #undef JSON_HEDLEY_GCC_VERSION_CHECK
822
#endif
823
#if defined(JSON_HEDLEY_GCC_VERSION)
824
    #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
825
#else
826
    #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0)
827
#endif
828
829
#if defined(JSON_HEDLEY_HAS_ATTRIBUTE)
830
    #undef JSON_HEDLEY_HAS_ATTRIBUTE
831
#endif
832
#if \
833
  defined(__has_attribute) && \
834
  ( \
835
    (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \
836
  )
837
#  define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute)
838
#else
839
#  define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0)
840
#endif
841
842
#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE)
843
    #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE
844
#endif
845
#if defined(__has_attribute)
846
    #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
847
#else
848
    #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
849
#endif
850
851
#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE)
852
    #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE
853
#endif
854
#if defined(__has_attribute)
855
    #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
856
#else
857
    #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
858
#endif
859
860
#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE)
861
    #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE
862
#endif
863
#if \
864
    defined(__has_cpp_attribute) && \
865
    defined(__cplusplus) && \
866
    (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0))
867
    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute)
868
#else
869
    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0)
870
#endif
871
872
#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS)
873
    #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS
874
#endif
875
#if !defined(__cplusplus) || !defined(__has_cpp_attribute)
876
    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)
877
#elif \
878
    !defined(JSON_HEDLEY_PGI_VERSION) && \
879
    !defined(JSON_HEDLEY_IAR_VERSION) && \
880
    (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \
881
    (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0))
882
    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute)
883
#else
884
    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)
885
#endif
886
887
#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE)
888
    #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE
889
#endif
890
#if defined(__has_cpp_attribute) && defined(__cplusplus)
891
    #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)
892
#else
893
    #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
894
#endif
895
896
#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE)
897
    #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE
898
#endif
899
#if defined(__has_cpp_attribute) && defined(__cplusplus)
900
    #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)
901
#else
902
    #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
903
#endif
904
905
#if defined(JSON_HEDLEY_HAS_BUILTIN)
906
    #undef JSON_HEDLEY_HAS_BUILTIN
907
#endif
908
#if defined(__has_builtin)
909
    #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin)
910
#else
911
    #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0)
912
#endif
913
914
#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN)
915
    #undef JSON_HEDLEY_GNUC_HAS_BUILTIN
916
#endif
917
#if defined(__has_builtin)
918
    #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)
919
#else
920
    #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
921
#endif
922
923
#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN)
924
    #undef JSON_HEDLEY_GCC_HAS_BUILTIN
925
#endif
926
#if defined(__has_builtin)
927
    #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)
928
#else
929
    #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
930
#endif
931
932
#if defined(JSON_HEDLEY_HAS_FEATURE)
933
    #undef JSON_HEDLEY_HAS_FEATURE
934
#endif
935
#if defined(__has_feature)
936
    #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature)
937
#else
938
    #define JSON_HEDLEY_HAS_FEATURE(feature) (0)
939
#endif
940
941
#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE)
942
    #undef JSON_HEDLEY_GNUC_HAS_FEATURE
943
#endif
944
#if defined(__has_feature)
945
    #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)
946
#else
947
    #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
948
#endif
949
950
#if defined(JSON_HEDLEY_GCC_HAS_FEATURE)
951
    #undef JSON_HEDLEY_GCC_HAS_FEATURE
952
#endif
953
#if defined(__has_feature)
954
    #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)
955
#else
956
    #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
957
#endif
958
959
#if defined(JSON_HEDLEY_HAS_EXTENSION)
960
    #undef JSON_HEDLEY_HAS_EXTENSION
961
#endif
962
#if defined(__has_extension)
963
    #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension)
964
#else
965
    #define JSON_HEDLEY_HAS_EXTENSION(extension) (0)
966
#endif
967
968
#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION)
969
    #undef JSON_HEDLEY_GNUC_HAS_EXTENSION
970
#endif
971
#if defined(__has_extension)
972
    #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)
973
#else
974
    #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
975
#endif
976
977
#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION)
978
    #undef JSON_HEDLEY_GCC_HAS_EXTENSION
979
#endif
980
#if defined(__has_extension)
981
    #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)
982
#else
983
    #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
984
#endif
985
986
#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE)
987
    #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE
988
#endif
989
#if defined(__has_declspec_attribute)
990
    #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute)
991
#else
992
    #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0)
993
#endif
994
995
#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE)
996
    #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE
997
#endif
998
#if defined(__has_declspec_attribute)
999
    #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)
1000
#else
1001
    #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
1002
#endif
1003
1004
#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE)
1005
    #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE
1006
#endif
1007
#if defined(__has_declspec_attribute)
1008
    #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)
1009
#else
1010
    #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
1011
#endif
1012
1013
#if defined(JSON_HEDLEY_HAS_WARNING)
1014
    #undef JSON_HEDLEY_HAS_WARNING
1015
#endif
1016
#if defined(__has_warning)
1017
    #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning)
1018
#else
1019
    #define JSON_HEDLEY_HAS_WARNING(warning) (0)
1020
#endif
1021
1022
#if defined(JSON_HEDLEY_GNUC_HAS_WARNING)
1023
    #undef JSON_HEDLEY_GNUC_HAS_WARNING
1024
#endif
1025
#if defined(__has_warning)
1026
    #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)
1027
#else
1028
    #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
1029
#endif
1030
1031
#if defined(JSON_HEDLEY_GCC_HAS_WARNING)
1032
    #undef JSON_HEDLEY_GCC_HAS_WARNING
1033
#endif
1034
#if defined(__has_warning)
1035
    #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)
1036
#else
1037
    #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
1038
#endif
1039
1040
#if \
1041
    (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
1042
    defined(__clang__) || \
1043
    JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \
1044
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1045
    JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \
1046
    JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \
1047
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1048
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1049
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \
1050
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \
1051
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \
1052
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \
1053
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1054
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1055
    JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \
1056
    JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \
1057
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \
1058
    (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR))
1059
    #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value)
1060
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
1061
    #define JSON_HEDLEY_PRAGMA(value) __pragma(value)
1062
#else
1063
    #define JSON_HEDLEY_PRAGMA(value)
1064
#endif
1065
1066
#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH)
1067
    #undef JSON_HEDLEY_DIAGNOSTIC_PUSH
1068
#endif
1069
#if defined(JSON_HEDLEY_DIAGNOSTIC_POP)
1070
    #undef JSON_HEDLEY_DIAGNOSTIC_POP
1071
#endif
1072
#if defined(__clang__)
1073
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push")
1074
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop")
1075
#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
1076
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
1077
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
1078
#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)
1079
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
1080
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
1081
#elif \
1082
    JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \
1083
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1084
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push))
1085
    #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop))
1086
#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0)
1087
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push")
1088
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop")
1089
#elif \
1090
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1091
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1092
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \
1093
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \
1094
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1095
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)
1096
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push")
1097
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop")
1098
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)
1099
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
1100
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
1101
#else
1102
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH
1103
    #define JSON_HEDLEY_DIAGNOSTIC_POP
1104
#endif
1105
1106
/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for
1107
   HEDLEY INTERNAL USE ONLY.  API subject to change without notice. */
1108
#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)
1109
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_
1110
#endif
1111
#if defined(__cplusplus)
1112
#  if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat")
1113
#    if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions")
1114
#      if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions")
1115
#        define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
1116
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
1117
    _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
1118
    _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
1119
    _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \
1120
    xpr \
1121
    JSON_HEDLEY_DIAGNOSTIC_POP
1122
#      else
1123
#        define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
1124
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
1125
    _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
1126
    _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
1127
    xpr \
1128
    JSON_HEDLEY_DIAGNOSTIC_POP
1129
#      endif
1130
#    else
1131
#      define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
1132
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
1133
    _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
1134
    xpr \
1135
    JSON_HEDLEY_DIAGNOSTIC_POP
1136
#    endif
1137
#  endif
1138
#endif
1139
#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)
1140
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x
1141
#endif
1142
1143
#if defined(JSON_HEDLEY_CONST_CAST)
1144
    #undef JSON_HEDLEY_CONST_CAST
1145
#endif
1146
#if defined(__cplusplus)
1147
#  define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast<T>(expr))
1148
#elif \
1149
  JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \
1150
  JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \
1151
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
1152
#  define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \
1153
        JSON_HEDLEY_DIAGNOSTIC_PUSH \
1154
        JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \
1155
        ((T) (expr)); \
1156
        JSON_HEDLEY_DIAGNOSTIC_POP \
1157
    }))
1158
#else
1159
#  define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr))
1160
#endif
1161
1162
#if defined(JSON_HEDLEY_REINTERPRET_CAST)
1163
    #undef JSON_HEDLEY_REINTERPRET_CAST
1164
#endif
1165
#if defined(__cplusplus)
1166
    #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast<T>(expr))
1167
#else
1168
    #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr))
1169
#endif
1170
1171
#if defined(JSON_HEDLEY_STATIC_CAST)
1172
    #undef JSON_HEDLEY_STATIC_CAST
1173
#endif
1174
#if defined(__cplusplus)
1175
    #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast<T>(expr))
1176
#else
1177
    #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr))
1178
#endif
1179
1180
#if defined(JSON_HEDLEY_CPP_CAST)
1181
    #undef JSON_HEDLEY_CPP_CAST
1182
#endif
1183
#if defined(__cplusplus)
1184
#  if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast")
1185
#    define JSON_HEDLEY_CPP_CAST(T, expr) \
1186
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
1187
    _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \
1188
    ((T) (expr)) \
1189
    JSON_HEDLEY_DIAGNOSTIC_POP
1190
#  elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0)
1191
#    define JSON_HEDLEY_CPP_CAST(T, expr) \
1192
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
1193
    _Pragma("diag_suppress=Pe137") \
1194
    JSON_HEDLEY_DIAGNOSTIC_POP
1195
#  else
1196
#    define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr))
1197
#  endif
1198
#else
1199
#  define JSON_HEDLEY_CPP_CAST(T, expr) (expr)
1200
#endif
1201
1202
#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED)
1203
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
1204
#endif
1205
#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations")
1206
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
1207
#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
1208
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)")
1209
#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1210
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786))
1211
#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)
1212
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445")
1213
#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
1214
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
1215
#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)
1216
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
1217
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
1218
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996))
1219
#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1220
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
1221
#elif \
1222
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1223
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1224
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1225
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1226
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1227
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1228
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1229
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1230
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1231
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1232
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)
1233
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718")
1234
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus)
1235
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)")
1236
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus)
1237
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)")
1238
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1239
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215")
1240
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)
1241
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)")
1242
#else
1243
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
1244
#endif
1245
1246
#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS)
1247
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
1248
#endif
1249
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
1250
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
1251
#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
1252
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
1253
#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1254
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161))
1255
#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
1256
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
1257
#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)
1258
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
1259
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
1260
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
1261
#elif \
1262
    JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \
1263
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \
1264
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1265
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0)
1266
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
1267
#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0)
1268
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
1269
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1270
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
1271
#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1272
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161")
1273
#else
1274
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
1275
#endif
1276
1277
#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES)
1278
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
1279
#endif
1280
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes")
1281
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"")
1282
#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)
1283
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
1284
#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0)
1285
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)")
1286
#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1287
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292))
1288
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0)
1289
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030))
1290
#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)
1291
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098")
1292
#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
1293
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
1294
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)
1295
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)")
1296
#elif \
1297
    JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \
1298
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \
1299
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0)
1300
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173")
1301
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1302
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097")
1303
#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1304
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
1305
#else
1306
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
1307
#endif
1308
1309
#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL)
1310
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
1311
#endif
1312
#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual")
1313
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"")
1314
#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
1315
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)")
1316
#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0)
1317
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"")
1318
#else
1319
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
1320
#endif
1321
1322
#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION)
1323
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
1324
#endif
1325
#if JSON_HEDLEY_HAS_WARNING("-Wunused-function")
1326
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"")
1327
#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0)
1328
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"")
1329
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0)
1330
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505))
1331
#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1332
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142")
1333
#else
1334
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
1335
#endif
1336
1337
#if defined(JSON_HEDLEY_DEPRECATED)
1338
    #undef JSON_HEDLEY_DEPRECATED
1339
#endif
1340
#if defined(JSON_HEDLEY_DEPRECATED_FOR)
1341
    #undef JSON_HEDLEY_DEPRECATED_FOR
1342
#endif
1343
#if \
1344
    JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
1345
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1346
    #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since))
1347
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement))
1348
#elif \
1349
    (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
1350
    JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \
1351
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1352
    JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \
1353
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \
1354
    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1355
    JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \
1356
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \
1357
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \
1358
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1359
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \
1360
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1361
    #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since)))
1362
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement)))
1363
#elif defined(__cplusplus) && (__cplusplus >= 201402L)
1364
    #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]])
1365
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]])
1366
#elif \
1367
    JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \
1368
    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1369
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1370
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1371
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1372
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1373
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1374
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1375
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1376
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1377
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1378
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1379
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1380
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1381
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
1382
    JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1383
    #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__))
1384
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__))
1385
#elif \
1386
    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1387
    JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \
1388
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1389
    #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated)
1390
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated)
1391
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1392
    #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated")
1393
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated")
1394
#else
1395
    #define JSON_HEDLEY_DEPRECATED(since)
1396
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement)
1397
#endif
1398
1399
#if defined(JSON_HEDLEY_UNAVAILABLE)
1400
    #undef JSON_HEDLEY_UNAVAILABLE
1401
#endif
1402
#if \
1403
    JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \
1404
    JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \
1405
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1406
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1407
    #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since)))
1408
#else
1409
    #define JSON_HEDLEY_UNAVAILABLE(available_since)
1410
#endif
1411
1412
#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT)
1413
    #undef JSON_HEDLEY_WARN_UNUSED_RESULT
1414
#endif
1415
#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG)
1416
    #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG
1417
#endif
1418
#if \
1419
    JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \
1420
    JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
1421
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1422
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1423
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1424
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1425
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1426
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1427
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1428
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1429
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1430
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1431
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1432
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1433
    (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \
1434
    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1435
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1436
    #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
1437
    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__))
1438
#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L)
1439
    #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
1440
    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]])
1441
#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard)
1442
    #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
1443
    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
1444
#elif defined(_Check_return_) /* SAL */
1445
    #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_
1446
    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_
1447
#else
1448
    #define JSON_HEDLEY_WARN_UNUSED_RESULT
1449
    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg)
1450
#endif
1451
1452
#if defined(JSON_HEDLEY_SENTINEL)
1453
    #undef JSON_HEDLEY_SENTINEL
1454
#endif
1455
#if \
1456
    JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \
1457
    JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
1458
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1459
    JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \
1460
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1461
    #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position)))
1462
#else
1463
    #define JSON_HEDLEY_SENTINEL(position)
1464
#endif
1465
1466
#if defined(JSON_HEDLEY_NO_RETURN)
1467
    #undef JSON_HEDLEY_NO_RETURN
1468
#endif
1469
#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1470
    #define JSON_HEDLEY_NO_RETURN __noreturn
1471
#elif \
1472
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1473
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1474
    #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
1475
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
1476
    #define JSON_HEDLEY_NO_RETURN _Noreturn
1477
#elif defined(__cplusplus) && (__cplusplus >= 201103L)
1478
    #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]])
1479
#elif \
1480
    JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \
1481
    JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \
1482
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1483
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1484
    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1485
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1486
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1487
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1488
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1489
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1490
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1491
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1492
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1493
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1494
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1495
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1496
    JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1497
    #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
1498
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1499
    #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return")
1500
#elif \
1501
    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1502
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1503
    #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
1504
#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)
1505
    #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;")
1506
#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)
1507
    #define JSON_HEDLEY_NO_RETURN __attribute((noreturn))
1508
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)
1509
    #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
1510
#else
1511
    #define JSON_HEDLEY_NO_RETURN
1512
#endif
1513
1514
#if defined(JSON_HEDLEY_NO_ESCAPE)
1515
    #undef JSON_HEDLEY_NO_ESCAPE
1516
#endif
1517
#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape)
1518
    #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__))
1519
#else
1520
    #define JSON_HEDLEY_NO_ESCAPE
1521
#endif
1522
1523
#if defined(JSON_HEDLEY_UNREACHABLE)
1524
    #undef JSON_HEDLEY_UNREACHABLE
1525
#endif
1526
#if defined(JSON_HEDLEY_UNREACHABLE_RETURN)
1527
    #undef JSON_HEDLEY_UNREACHABLE_RETURN
1528
#endif
1529
#if defined(JSON_HEDLEY_ASSUME)
1530
    #undef JSON_HEDLEY_ASSUME
1531
#endif
1532
#if \
1533
    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1534
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1535
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1536
    #define JSON_HEDLEY_ASSUME(expr) __assume(expr)
1537
#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume)
1538
    #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr)
1539
#elif \
1540
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
1541
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)
1542
    #if defined(__cplusplus)
1543
        #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr)
1544
    #else
1545
        #define JSON_HEDLEY_ASSUME(expr) _nassert(expr)
1546
    #endif
1547
#endif
1548
#if \
1549
    (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \
1550
    JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \
1551
    JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \
1552
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1553
    JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \
1554
    JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \
1555
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1556
    #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable()
1557
#elif defined(JSON_HEDLEY_ASSUME)
1558
    #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
1559
#endif
1560
#if !defined(JSON_HEDLEY_ASSUME)
1561
    #if defined(JSON_HEDLEY_UNREACHABLE)
1562
        #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1)))
1563
    #else
1564
        #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr)
1565
    #endif
1566
#endif
1567
#if defined(JSON_HEDLEY_UNREACHABLE)
1568
    #if  \
1569
        JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
1570
        JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)
1571
        #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value))
1572
    #else
1573
        #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE()
1574
    #endif
1575
#else
1576
    #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value)
1577
#endif
1578
#if !defined(JSON_HEDLEY_UNREACHABLE)
1579
    #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
1580
#endif
1581
1582
JSON_HEDLEY_DIAGNOSTIC_PUSH
1583
#if JSON_HEDLEY_HAS_WARNING("-Wpedantic")
1584
    #pragma clang diagnostic ignored "-Wpedantic"
1585
#endif
1586
#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus)
1587
    #pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
1588
#endif
1589
#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0)
1590
    #if defined(__clang__)
1591
        #pragma clang diagnostic ignored "-Wvariadic-macros"
1592
    #elif defined(JSON_HEDLEY_GCC_VERSION)
1593
        #pragma GCC diagnostic ignored "-Wvariadic-macros"
1594
    #endif
1595
#endif
1596
#if defined(JSON_HEDLEY_NON_NULL)
1597
    #undef JSON_HEDLEY_NON_NULL
1598
#endif
1599
#if \
1600
    JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \
1601
    JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
1602
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1603
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)
1604
    #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__)))
1605
#else
1606
    #define JSON_HEDLEY_NON_NULL(...)
1607
#endif
1608
JSON_HEDLEY_DIAGNOSTIC_POP
1609
1610
#if defined(JSON_HEDLEY_PRINTF_FORMAT)
1611
    #undef JSON_HEDLEY_PRINTF_FORMAT
1612
#endif
1613
#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO)
1614
    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check)))
1615
#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO)
1616
    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check)))
1617
#elif \
1618
    JSON_HEDLEY_HAS_ATTRIBUTE(format) || \
1619
    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1620
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1621
    JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \
1622
    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1623
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1624
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1625
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1626
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1627
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1628
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1629
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1630
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1631
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1632
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1633
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1634
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1635
    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check)))
1636
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0)
1637
    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check))
1638
#else
1639
    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check)
1640
#endif
1641
1642
#if defined(JSON_HEDLEY_CONSTEXPR)
1643
    #undef JSON_HEDLEY_CONSTEXPR
1644
#endif
1645
#if defined(__cplusplus)
1646
    #if __cplusplus >= 201103L
1647
        #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr)
1648
    #endif
1649
#endif
1650
#if !defined(JSON_HEDLEY_CONSTEXPR)
1651
    #define JSON_HEDLEY_CONSTEXPR
1652
#endif
1653
1654
#if defined(JSON_HEDLEY_PREDICT)
1655
    #undef JSON_HEDLEY_PREDICT
1656
#endif
1657
#if defined(JSON_HEDLEY_LIKELY)
1658
    #undef JSON_HEDLEY_LIKELY
1659
#endif
1660
#if defined(JSON_HEDLEY_UNLIKELY)
1661
    #undef JSON_HEDLEY_UNLIKELY
1662
#endif
1663
#if defined(JSON_HEDLEY_UNPREDICTABLE)
1664
    #undef JSON_HEDLEY_UNPREDICTABLE
1665
#endif
1666
#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable)
1667
    #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr))
1668
#endif
1669
#if \
1670
  (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \
1671
  JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \
1672
  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1673
#  define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability(  (expr), (value), (probability))
1674
#  define JSON_HEDLEY_PREDICT_TRUE(expr, probability)   __builtin_expect_with_probability(!!(expr),    1   , (probability))
1675
#  define JSON_HEDLEY_PREDICT_FALSE(expr, probability)  __builtin_expect_with_probability(!!(expr),    0   , (probability))
1676
16.2M
#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
1677
48.0M
#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
1678
#elif \
1679
  (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
1680
  JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \
1681
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1682
  (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \
1683
  JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1684
  JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1685
  JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1686
  JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \
1687
  JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \
1688
  JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \
1689
  JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
1690
  JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1691
  JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1692
  JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \
1693
  JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
1694
  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1695
#  define JSON_HEDLEY_PREDICT(expr, expected, probability) \
1696
    (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)))
1697
#  define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \
1698
    (__extension__ ({ \
1699
        double hedley_probability_ = (probability); \
1700
        ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \
1701
    }))
1702
#  define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \
1703
    (__extension__ ({ \
1704
        double hedley_probability_ = (probability); \
1705
        ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \
1706
    }))
1707
#  define JSON_HEDLEY_LIKELY(expr)   __builtin_expect(!!(expr), 1)
1708
#  define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
1709
#else
1710
#  define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))
1711
#  define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr))
1712
#  define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr))
1713
#  define JSON_HEDLEY_LIKELY(expr) (!!(expr))
1714
#  define JSON_HEDLEY_UNLIKELY(expr) (!!(expr))
1715
#endif
1716
#if !defined(JSON_HEDLEY_UNPREDICTABLE)
1717
    #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5)
1718
#endif
1719
1720
#if defined(JSON_HEDLEY_MALLOC)
1721
    #undef JSON_HEDLEY_MALLOC
1722
#endif
1723
#if \
1724
    JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \
1725
    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1726
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1727
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1728
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1729
    JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \
1730
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1731
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1732
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1733
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1734
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1735
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1736
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1737
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1738
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1739
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1740
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1741
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1742
    #define JSON_HEDLEY_MALLOC __attribute__((__malloc__))
1743
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1744
    #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory")
1745
#elif \
1746
    JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
1747
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1748
    #define JSON_HEDLEY_MALLOC __declspec(restrict)
1749
#else
1750
    #define JSON_HEDLEY_MALLOC
1751
#endif
1752
1753
#if defined(JSON_HEDLEY_PURE)
1754
    #undef JSON_HEDLEY_PURE
1755
#endif
1756
#if \
1757
  JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \
1758
  JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \
1759
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1760
  JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1761
  JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1762
  JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1763
  JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1764
  (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1765
  JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1766
  (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1767
  JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1768
  (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1769
  JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1770
  (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1771
  JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1772
  JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1773
  JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1774
  JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1775
  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1776
#  define JSON_HEDLEY_PURE __attribute__((__pure__))
1777
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1778
#  define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data")
1779
#elif defined(__cplusplus) && \
1780
    ( \
1781
      JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \
1782
      JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \
1783
      JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \
1784
    )
1785
#  define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;")
1786
#else
1787
#  define JSON_HEDLEY_PURE
1788
#endif
1789
1790
#if defined(JSON_HEDLEY_CONST)
1791
    #undef JSON_HEDLEY_CONST
1792
#endif
1793
#if \
1794
    JSON_HEDLEY_HAS_ATTRIBUTE(const) || \
1795
    JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \
1796
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1797
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1798
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1799
    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1800
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1801
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1802
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1803
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1804
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1805
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1806
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1807
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1808
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1809
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1810
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1811
    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1812
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1813
    #define JSON_HEDLEY_CONST __attribute__((__const__))
1814
#elif \
1815
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
1816
    #define JSON_HEDLEY_CONST _Pragma("no_side_effect")
1817
#else
1818
    #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE
1819
#endif
1820
1821
#if defined(JSON_HEDLEY_RESTRICT)
1822
    #undef JSON_HEDLEY_RESTRICT
1823
#endif
1824
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus)
1825
    #define JSON_HEDLEY_RESTRICT restrict
1826
#elif \
1827
    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
1828
    JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
1829
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1830
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
1831
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1832
    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1833
    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
1834
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1835
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \
1836
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \
1837
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1838
    (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \
1839
    JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \
1840
    defined(__clang__) || \
1841
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1842
    #define JSON_HEDLEY_RESTRICT __restrict
1843
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus)
1844
    #define JSON_HEDLEY_RESTRICT _Restrict
1845
#else
1846
    #define JSON_HEDLEY_RESTRICT
1847
#endif
1848
1849
#if defined(JSON_HEDLEY_INLINE)
1850
    #undef JSON_HEDLEY_INLINE
1851
#endif
1852
#if \
1853
    (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
1854
    (defined(__cplusplus) && (__cplusplus >= 199711L))
1855
    #define JSON_HEDLEY_INLINE inline
1856
#elif \
1857
    defined(JSON_HEDLEY_GCC_VERSION) || \
1858
    JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0)
1859
    #define JSON_HEDLEY_INLINE __inline__
1860
#elif \
1861
    JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \
1862
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
1863
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1864
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \
1865
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \
1866
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
1867
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \
1868
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1869
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1870
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1871
    #define JSON_HEDLEY_INLINE __inline
1872
#else
1873
    #define JSON_HEDLEY_INLINE
1874
#endif
1875
1876
#if defined(JSON_HEDLEY_ALWAYS_INLINE)
1877
    #undef JSON_HEDLEY_ALWAYS_INLINE
1878
#endif
1879
#if \
1880
  JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \
1881
  JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
1882
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1883
  JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1884
  JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1885
  JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1886
  JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1887
  (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1888
  JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1889
  (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1890
  JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1891
  (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1892
  JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1893
  (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1894
  JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1895
  JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1896
  JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1897
  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
1898
  JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1899
#  define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE
1900
#elif \
1901
  JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \
1902
  JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1903
#  define JSON_HEDLEY_ALWAYS_INLINE __forceinline
1904
#elif defined(__cplusplus) && \
1905
    ( \
1906
      JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1907
      JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1908
      JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1909
      JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
1910
      JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1911
      JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \
1912
    )
1913
#  define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
1914
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1915
#  define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced")
1916
#else
1917
#  define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE
1918
#endif
1919
1920
#if defined(JSON_HEDLEY_NEVER_INLINE)
1921
    #undef JSON_HEDLEY_NEVER_INLINE
1922
#endif
1923
#if \
1924
    JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \
1925
    JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
1926
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1927
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1928
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1929
    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
1930
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
1931
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1932
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
1933
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1934
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
1935
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1936
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
1937
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1938
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
1939
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
1940
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
1941
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
1942
    JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
1943
    #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__))
1944
#elif \
1945
    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
1946
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
1947
    #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
1948
#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0)
1949
    #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline")
1950
#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)
1951
    #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;")
1952
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
1953
    #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never")
1954
#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)
1955
    #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline))
1956
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)
1957
    #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
1958
#else
1959
    #define JSON_HEDLEY_NEVER_INLINE
1960
#endif
1961
1962
#if defined(JSON_HEDLEY_PRIVATE)
1963
    #undef JSON_HEDLEY_PRIVATE
1964
#endif
1965
#if defined(JSON_HEDLEY_PUBLIC)
1966
    #undef JSON_HEDLEY_PUBLIC
1967
#endif
1968
#if defined(JSON_HEDLEY_IMPORT)
1969
    #undef JSON_HEDLEY_IMPORT
1970
#endif
1971
#if defined(_WIN32) || defined(__CYGWIN__)
1972
#  define JSON_HEDLEY_PRIVATE
1973
#  define JSON_HEDLEY_PUBLIC   __declspec(dllexport)
1974
#  define JSON_HEDLEY_IMPORT   __declspec(dllimport)
1975
#else
1976
#  if \
1977
    JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \
1978
    JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
1979
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
1980
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
1981
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
1982
    JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
1983
    ( \
1984
      defined(__TI_EABI__) && \
1985
      ( \
1986
        (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
1987
        JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \
1988
      ) \
1989
    ) || \
1990
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
1991
#    define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden")))
1992
#    define JSON_HEDLEY_PUBLIC  __attribute__((__visibility__("default")))
1993
#  else
1994
#    define JSON_HEDLEY_PRIVATE
1995
#    define JSON_HEDLEY_PUBLIC
1996
#  endif
1997
#  define JSON_HEDLEY_IMPORT    extern
1998
#endif
1999
2000
#if defined(JSON_HEDLEY_NO_THROW)
2001
    #undef JSON_HEDLEY_NO_THROW
2002
#endif
2003
#if \
2004
    JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \
2005
    JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
2006
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
2007
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
2008
    #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__))
2009
#elif \
2010
    JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \
2011
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
2012
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)
2013
    #define JSON_HEDLEY_NO_THROW __declspec(nothrow)
2014
#else
2015
    #define JSON_HEDLEY_NO_THROW
2016
#endif
2017
2018
#if defined(JSON_HEDLEY_FALL_THROUGH)
2019
    #undef JSON_HEDLEY_FALL_THROUGH
2020
#endif
2021
#if \
2022
    JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \
2023
    JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \
2024
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
2025
    #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__))
2026
#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough)
2027
    #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]])
2028
#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough)
2029
    #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]])
2030
#elif defined(__fallthrough) /* SAL */
2031
    #define JSON_HEDLEY_FALL_THROUGH __fallthrough
2032
#else
2033
    #define JSON_HEDLEY_FALL_THROUGH
2034
#endif
2035
2036
#if defined(JSON_HEDLEY_RETURNS_NON_NULL)
2037
    #undef JSON_HEDLEY_RETURNS_NON_NULL
2038
#endif
2039
#if \
2040
    JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \
2041
    JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \
2042
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
2043
    #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__))
2044
#elif defined(_Ret_notnull_) /* SAL */
2045
    #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_
2046
#else
2047
    #define JSON_HEDLEY_RETURNS_NON_NULL
2048
#endif
2049
2050
#if defined(JSON_HEDLEY_ARRAY_PARAM)
2051
    #undef JSON_HEDLEY_ARRAY_PARAM
2052
#endif
2053
#if \
2054
    defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
2055
    !defined(__STDC_NO_VLA__) && \
2056
    !defined(__cplusplus) && \
2057
    !defined(JSON_HEDLEY_PGI_VERSION) && \
2058
    !defined(JSON_HEDLEY_TINYC_VERSION)
2059
    #define JSON_HEDLEY_ARRAY_PARAM(name) (name)
2060
#else
2061
    #define JSON_HEDLEY_ARRAY_PARAM(name)
2062
#endif
2063
2064
#if defined(JSON_HEDLEY_IS_CONSTANT)
2065
    #undef JSON_HEDLEY_IS_CONSTANT
2066
#endif
2067
#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR)
2068
    #undef JSON_HEDLEY_REQUIRE_CONSTEXPR
2069
#endif
2070
/* JSON_HEDLEY_IS_CONSTEXPR_ is for
2071
   HEDLEY INTERNAL USE ONLY.  API subject to change without notice. */
2072
#if defined(JSON_HEDLEY_IS_CONSTEXPR_)
2073
    #undef JSON_HEDLEY_IS_CONSTEXPR_
2074
#endif
2075
#if \
2076
    JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \
2077
    JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
2078
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
2079
    JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \
2080
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
2081
    JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
2082
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
2083
    (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \
2084
    JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
2085
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
2086
    #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr)
2087
#endif
2088
#if !defined(__cplusplus)
2089
#  if \
2090
       JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \
2091
       JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
2092
       JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
2093
       JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
2094
       JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
2095
       JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \
2096
       JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24)
2097
#if defined(__INTPTR_TYPE__)
2098
    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*)
2099
#else
2100
    #include <stdint.h>
2101
    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*)
2102
#endif
2103
#  elif \
2104
       ( \
2105
          defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \
2106
          !defined(JSON_HEDLEY_SUNPRO_VERSION) && \
2107
          !defined(JSON_HEDLEY_PGI_VERSION) && \
2108
          !defined(JSON_HEDLEY_IAR_VERSION)) || \
2109
       (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
2110
       JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \
2111
       JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \
2112
       JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \
2113
       JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0)
2114
#if defined(__INTPTR_TYPE__)
2115
    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0)
2116
#else
2117
    #include <stdint.h>
2118
    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0)
2119
#endif
2120
#  elif \
2121
       defined(JSON_HEDLEY_GCC_VERSION) || \
2122
       defined(JSON_HEDLEY_INTEL_VERSION) || \
2123
       defined(JSON_HEDLEY_TINYC_VERSION) || \
2124
       defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \
2125
       JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \
2126
       defined(JSON_HEDLEY_TI_CL2000_VERSION) || \
2127
       defined(JSON_HEDLEY_TI_CL6X_VERSION) || \
2128
       defined(JSON_HEDLEY_TI_CL7X_VERSION) || \
2129
       defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \
2130
       defined(__clang__)
2131
#    define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \
2132
        sizeof(void) != \
2133
        sizeof(*( \
2134
                  1 ? \
2135
                  ((void*) ((expr) * 0L) ) : \
2136
((struct { char v[sizeof(void) * 2]; } *) 1) \
2137
                ) \
2138
              ) \
2139
                                            )
2140
#  endif
2141
#endif
2142
#if defined(JSON_HEDLEY_IS_CONSTEXPR_)
2143
    #if !defined(JSON_HEDLEY_IS_CONSTANT)
2144
        #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr)
2145
    #endif
2146
    #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1))
2147
#else
2148
    #if !defined(JSON_HEDLEY_IS_CONSTANT)
2149
        #define JSON_HEDLEY_IS_CONSTANT(expr) (0)
2150
    #endif
2151
    #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr)
2152
#endif
2153
2154
#if defined(JSON_HEDLEY_BEGIN_C_DECLS)
2155
    #undef JSON_HEDLEY_BEGIN_C_DECLS
2156
#endif
2157
#if defined(JSON_HEDLEY_END_C_DECLS)
2158
    #undef JSON_HEDLEY_END_C_DECLS
2159
#endif
2160
#if defined(JSON_HEDLEY_C_DECL)
2161
    #undef JSON_HEDLEY_C_DECL
2162
#endif
2163
#if defined(__cplusplus)
2164
    #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" {
2165
    #define JSON_HEDLEY_END_C_DECLS }
2166
    #define JSON_HEDLEY_C_DECL extern "C"
2167
#else
2168
    #define JSON_HEDLEY_BEGIN_C_DECLS
2169
    #define JSON_HEDLEY_END_C_DECLS
2170
    #define JSON_HEDLEY_C_DECL
2171
#endif
2172
2173
#if defined(JSON_HEDLEY_STATIC_ASSERT)
2174
    #undef JSON_HEDLEY_STATIC_ASSERT
2175
#endif
2176
#if \
2177
  !defined(__cplusplus) && ( \
2178
      (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \
2179
      (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
2180
      JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \
2181
      JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
2182
      defined(_Static_assert) \
2183
    )
2184
#  define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message)
2185
#elif \
2186
  (defined(__cplusplus) && (__cplusplus >= 201103L)) || \
2187
  JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \
2188
  JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
2189
#  define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message))
2190
#else
2191
#  define JSON_HEDLEY_STATIC_ASSERT(expr, message)
2192
#endif
2193
2194
#if defined(JSON_HEDLEY_NULL)
2195
    #undef JSON_HEDLEY_NULL
2196
#endif
2197
#if defined(__cplusplus)
2198
    #if __cplusplus >= 201103L
2199
        #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr)
2200
    #elif defined(NULL)
2201
        #define JSON_HEDLEY_NULL NULL
2202
    #else
2203
        #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0)
2204
    #endif
2205
#elif defined(NULL)
2206
    #define JSON_HEDLEY_NULL NULL
2207
#else
2208
    #define JSON_HEDLEY_NULL ((void*) 0)
2209
#endif
2210
2211
#if defined(JSON_HEDLEY_MESSAGE)
2212
    #undef JSON_HEDLEY_MESSAGE
2213
#endif
2214
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
2215
#  define JSON_HEDLEY_MESSAGE(msg) \
2216
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
2217
    JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
2218
    JSON_HEDLEY_PRAGMA(message msg) \
2219
    JSON_HEDLEY_DIAGNOSTIC_POP
2220
#elif \
2221
  JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \
2222
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
2223
#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg)
2224
#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0)
2225
#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg)
2226
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
2227
#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))
2228
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0)
2229
#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))
2230
#else
2231
#  define JSON_HEDLEY_MESSAGE(msg)
2232
#endif
2233
2234
#if defined(JSON_HEDLEY_WARNING)
2235
    #undef JSON_HEDLEY_WARNING
2236
#endif
2237
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
2238
#  define JSON_HEDLEY_WARNING(msg) \
2239
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
2240
    JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
2241
    JSON_HEDLEY_PRAGMA(clang warning msg) \
2242
    JSON_HEDLEY_DIAGNOSTIC_POP
2243
#elif \
2244
  JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \
2245
  JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \
2246
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
2247
#  define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg)
2248
#elif \
2249
  JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \
2250
  JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
2251
#  define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg))
2252
#else
2253
#  define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg)
2254
#endif
2255
2256
#if defined(JSON_HEDLEY_REQUIRE)
2257
    #undef JSON_HEDLEY_REQUIRE
2258
#endif
2259
#if defined(JSON_HEDLEY_REQUIRE_MSG)
2260
    #undef JSON_HEDLEY_REQUIRE_MSG
2261
#endif
2262
#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if)
2263
#  if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat")
2264
#    define JSON_HEDLEY_REQUIRE(expr) \
2265
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
2266
    _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
2267
    __attribute__((diagnose_if(!(expr), #expr, "error"))) \
2268
    JSON_HEDLEY_DIAGNOSTIC_POP
2269
#    define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \
2270
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
2271
    _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
2272
    __attribute__((diagnose_if(!(expr), msg, "error"))) \
2273
    JSON_HEDLEY_DIAGNOSTIC_POP
2274
#  else
2275
#    define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error")))
2276
#    define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error")))
2277
#  endif
2278
#else
2279
#  define JSON_HEDLEY_REQUIRE(expr)
2280
#  define JSON_HEDLEY_REQUIRE_MSG(expr,msg)
2281
#endif
2282
2283
#if defined(JSON_HEDLEY_FLAGS)
2284
    #undef JSON_HEDLEY_FLAGS
2285
#endif
2286
#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion"))
2287
    #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__))
2288
#else
2289
    #define JSON_HEDLEY_FLAGS
2290
#endif
2291
2292
#if defined(JSON_HEDLEY_FLAGS_CAST)
2293
    #undef JSON_HEDLEY_FLAGS_CAST
2294
#endif
2295
#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0)
2296
#  define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \
2297
        JSON_HEDLEY_DIAGNOSTIC_PUSH \
2298
        _Pragma("warning(disable:188)") \
2299
        ((T) (expr)); \
2300
        JSON_HEDLEY_DIAGNOSTIC_POP \
2301
    }))
2302
#else
2303
#  define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr)
2304
#endif
2305
2306
#if defined(JSON_HEDLEY_EMPTY_BASES)
2307
    #undef JSON_HEDLEY_EMPTY_BASES
2308
#endif
2309
#if \
2310
    (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \
2311
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
2312
    #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases)
2313
#else
2314
    #define JSON_HEDLEY_EMPTY_BASES
2315
#endif
2316
2317
/* Remaining macros are deprecated. */
2318
2319
#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK)
2320
    #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK
2321
#endif
2322
#if defined(__clang__)
2323
    #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0)
2324
#else
2325
    #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
2326
#endif
2327
2328
#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE)
2329
    #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE
2330
#endif
2331
#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
2332
2333
#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE)
2334
    #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE
2335
#endif
2336
#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute)
2337
2338
#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN)
2339
    #undef JSON_HEDLEY_CLANG_HAS_BUILTIN
2340
#endif
2341
#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin)
2342
2343
#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE)
2344
    #undef JSON_HEDLEY_CLANG_HAS_FEATURE
2345
#endif
2346
#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature)
2347
2348
#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION)
2349
    #undef JSON_HEDLEY_CLANG_HAS_EXTENSION
2350
#endif
2351
#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension)
2352
2353
#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE)
2354
    #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE
2355
#endif
2356
#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute)
2357
2358
#if defined(JSON_HEDLEY_CLANG_HAS_WARNING)
2359
    #undef JSON_HEDLEY_CLANG_HAS_WARNING
2360
#endif
2361
#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning)
2362
2363
#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */
2364
2365
2366
// This file contains all internal macro definitions (except those affecting ABI)
2367
// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them
2368
2369
// #include <nlohmann/detail/abi_macros.hpp>
2370
2371
2372
// exclude unsupported compilers
2373
#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK)
2374
    #if defined(__clang__)
2375
        #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400
2376
            #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers"
2377
        #endif
2378
    #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER))
2379
        #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800
2380
            #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers"
2381
        #endif
2382
    #endif
2383
#endif
2384
2385
// C++ language standard detection
2386
// if the user manually specified the used c++ version this is skipped
2387
#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11)
2388
    #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L)
2389
        #define JSON_HAS_CPP_20
2390
        #define JSON_HAS_CPP_17
2391
        #define JSON_HAS_CPP_14
2392
    #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464
2393
        #define JSON_HAS_CPP_17
2394
        #define JSON_HAS_CPP_14
2395
    #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1)
2396
        #define JSON_HAS_CPP_14
2397
    #endif
2398
    // the cpp 11 flag is always specified because it is the minimal required version
2399
    #define JSON_HAS_CPP_11
2400
#endif
2401
2402
#ifdef __has_include
2403
    #if __has_include(<version>)
2404
        #include <version>
2405
    #endif
2406
#endif
2407
2408
#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM)
2409
    #ifdef JSON_HAS_CPP_17
2410
        #if defined(__cpp_lib_filesystem)
2411
            #define JSON_HAS_FILESYSTEM 1
2412
        #elif defined(__cpp_lib_experimental_filesystem)
2413
            #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
2414
        #elif !defined(__has_include)
2415
            #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
2416
        #elif __has_include(<filesystem>)
2417
            #define JSON_HAS_FILESYSTEM 1
2418
        #elif __has_include(<experimental/filesystem>)
2419
            #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
2420
        #endif
2421
2422
        // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/
2423
        #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8
2424
            #undef JSON_HAS_FILESYSTEM
2425
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2426
        #endif
2427
2428
        // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support
2429
        #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8
2430
            #undef JSON_HAS_FILESYSTEM
2431
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2432
        #endif
2433
2434
        // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support
2435
        #if defined(__clang_major__) && __clang_major__ < 7
2436
            #undef JSON_HAS_FILESYSTEM
2437
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2438
        #endif
2439
2440
        // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support
2441
        #if defined(_MSC_VER) && _MSC_VER < 1914
2442
            #undef JSON_HAS_FILESYSTEM
2443
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2444
        #endif
2445
2446
        // no filesystem support before iOS 13
2447
        #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
2448
            #undef JSON_HAS_FILESYSTEM
2449
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2450
        #endif
2451
2452
        // no filesystem support before macOS Catalina
2453
        #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500
2454
            #undef JSON_HAS_FILESYSTEM
2455
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2456
        #endif
2457
    #endif
2458
#endif
2459
2460
#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM
2461
    #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0
2462
#endif
2463
2464
#ifndef JSON_HAS_FILESYSTEM
2465
    #define JSON_HAS_FILESYSTEM 0
2466
#endif
2467
2468
#ifndef JSON_HAS_THREE_WAY_COMPARISON
2469
    #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \
2470
        && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L
2471
        #define JSON_HAS_THREE_WAY_COMPARISON 1
2472
    #else
2473
        #define JSON_HAS_THREE_WAY_COMPARISON 0
2474
    #endif
2475
#endif
2476
2477
#ifndef JSON_HAS_RANGES
2478
    // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error
2479
    #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427
2480
        #define JSON_HAS_RANGES 0
2481
    #elif defined(__cpp_lib_ranges)
2482
        #define JSON_HAS_RANGES 1
2483
    #else
2484
        #define JSON_HAS_RANGES 0
2485
    #endif
2486
#endif
2487
2488
#ifndef JSON_HAS_STATIC_RTTI
2489
    #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0
2490
        #define JSON_HAS_STATIC_RTTI 1
2491
    #else
2492
        #define JSON_HAS_STATIC_RTTI 0
2493
    #endif
2494
#endif
2495
2496
#ifdef JSON_HAS_CPP_17
2497
    #define JSON_INLINE_VARIABLE inline
2498
#else
2499
    #define JSON_INLINE_VARIABLE
2500
#endif
2501
2502
#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address)
2503
    #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]]
2504
#else
2505
    #define JSON_NO_UNIQUE_ADDRESS
2506
#endif
2507
2508
// disable documentation warnings on clang
2509
#if defined(__clang__)
2510
    #pragma clang diagnostic push
2511
    #pragma clang diagnostic ignored "-Wdocumentation"
2512
    #pragma clang diagnostic ignored "-Wdocumentation-unknown-command"
2513
#endif
2514
2515
// allow disabling exceptions
2516
#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION)
2517
15.2k
    #define JSON_THROW(exception) throw exception
2518
    #define JSON_TRY try
2519
    #define JSON_CATCH(exception) catch(exception)
2520
    #define JSON_INTERNAL_CATCH(exception) catch(exception)
2521
#else
2522
    #include <cstdlib>
2523
    #define JSON_THROW(exception) std::abort()
2524
    #define JSON_TRY if(true)
2525
    #define JSON_CATCH(exception) if(false)
2526
    #define JSON_INTERNAL_CATCH(exception) if(false)
2527
#endif
2528
2529
// override exception macros
2530
#if defined(JSON_THROW_USER)
2531
    #undef JSON_THROW
2532
    #define JSON_THROW JSON_THROW_USER
2533
#endif
2534
#if defined(JSON_TRY_USER)
2535
    #undef JSON_TRY
2536
    #define JSON_TRY JSON_TRY_USER
2537
#endif
2538
#if defined(JSON_CATCH_USER)
2539
    #undef JSON_CATCH
2540
    #define JSON_CATCH JSON_CATCH_USER
2541
    #undef JSON_INTERNAL_CATCH
2542
    #define JSON_INTERNAL_CATCH JSON_CATCH_USER
2543
#endif
2544
#if defined(JSON_INTERNAL_CATCH_USER)
2545
    #undef JSON_INTERNAL_CATCH
2546
    #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER
2547
#endif
2548
2549
// allow overriding assert
2550
#if !defined(JSON_ASSERT)
2551
    #include <cassert> // assert
2552
0
    #define JSON_ASSERT(x) assert(x)
2553
#endif
2554
2555
// allow to access some private functions (needed by the test suite)
2556
#if defined(JSON_TESTS_PRIVATE)
2557
    #define JSON_PRIVATE_UNLESS_TESTED public
2558
#else
2559
    #define JSON_PRIVATE_UNLESS_TESTED private
2560
#endif
2561
2562
/*!
2563
@brief macro to briefly define a mapping between an enum and JSON
2564
@def NLOHMANN_JSON_SERIALIZE_ENUM
2565
@since version 3.4.0
2566
*/
2567
#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...)                                            \
2568
    template<typename BasicJsonType>                                                            \
2569
    inline void to_json(BasicJsonType& j, const ENUM_TYPE& e)                                   \
2570
    {                                                                                           \
2571
        static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!");          \
2572
        static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__;                     \
2573
        auto it = std::find_if(std::begin(m), std::end(m),                                      \
2574
                               [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool  \
2575
        {                                                                                       \
2576
            return ej_pair.first == e;                                                          \
2577
        });                                                                                     \
2578
        j = ((it != std::end(m)) ? it : std::begin(m))->second;                                 \
2579
    }                                                                                           \
2580
    template<typename BasicJsonType>                                                            \
2581
    inline void from_json(const BasicJsonType& j, ENUM_TYPE& e)                                 \
2582
    {                                                                                           \
2583
        static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!");          \
2584
        static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__;                     \
2585
        auto it = std::find_if(std::begin(m), std::end(m),                                      \
2586
                               [&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \
2587
        {                                                                                       \
2588
            return ej_pair.second == j;                                                         \
2589
        });                                                                                     \
2590
        e = ((it != std::end(m)) ? it : std::begin(m))->first;                                  \
2591
    }
2592
2593
// Ugly macros to avoid uglier copy-paste when specializing basic_json. They
2594
// may be removed in the future once the class is split.
2595
2596
#define NLOHMANN_BASIC_JSON_TPL_DECLARATION                                \
2597
    template<template<typename, typename, typename...> class ObjectType,   \
2598
             template<typename, typename...> class ArrayType,              \
2599
             class StringType, class BooleanType, class NumberIntegerType, \
2600
             class NumberUnsignedType, class NumberFloatType,              \
2601
             template<typename> class AllocatorType,                       \
2602
             template<typename, typename = void> class JSONSerializer,     \
2603
             class BinaryType,                                             \
2604
             class CustomBaseClass>
2605
2606
#define NLOHMANN_BASIC_JSON_TPL                                            \
2607
    basic_json<ObjectType, ArrayType, StringType, BooleanType,             \
2608
    NumberIntegerType, NumberUnsignedType, NumberFloatType,                \
2609
    AllocatorType, JSONSerializer, BinaryType, CustomBaseClass>
2610
2611
// Macros to simplify conversion from/to types
2612
2613
#define NLOHMANN_JSON_EXPAND( x ) x
2614
#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
2615
#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \
2616
        NLOHMANN_JSON_PASTE64, \
2617
        NLOHMANN_JSON_PASTE63, \
2618
        NLOHMANN_JSON_PASTE62, \
2619
        NLOHMANN_JSON_PASTE61, \
2620
        NLOHMANN_JSON_PASTE60, \
2621
        NLOHMANN_JSON_PASTE59, \
2622
        NLOHMANN_JSON_PASTE58, \
2623
        NLOHMANN_JSON_PASTE57, \
2624
        NLOHMANN_JSON_PASTE56, \
2625
        NLOHMANN_JSON_PASTE55, \
2626
        NLOHMANN_JSON_PASTE54, \
2627
        NLOHMANN_JSON_PASTE53, \
2628
        NLOHMANN_JSON_PASTE52, \
2629
        NLOHMANN_JSON_PASTE51, \
2630
        NLOHMANN_JSON_PASTE50, \
2631
        NLOHMANN_JSON_PASTE49, \
2632
        NLOHMANN_JSON_PASTE48, \
2633
        NLOHMANN_JSON_PASTE47, \
2634
        NLOHMANN_JSON_PASTE46, \
2635
        NLOHMANN_JSON_PASTE45, \
2636
        NLOHMANN_JSON_PASTE44, \
2637
        NLOHMANN_JSON_PASTE43, \
2638
        NLOHMANN_JSON_PASTE42, \
2639
        NLOHMANN_JSON_PASTE41, \
2640
        NLOHMANN_JSON_PASTE40, \
2641
        NLOHMANN_JSON_PASTE39, \
2642
        NLOHMANN_JSON_PASTE38, \
2643
        NLOHMANN_JSON_PASTE37, \
2644
        NLOHMANN_JSON_PASTE36, \
2645
        NLOHMANN_JSON_PASTE35, \
2646
        NLOHMANN_JSON_PASTE34, \
2647
        NLOHMANN_JSON_PASTE33, \
2648
        NLOHMANN_JSON_PASTE32, \
2649
        NLOHMANN_JSON_PASTE31, \
2650
        NLOHMANN_JSON_PASTE30, \
2651
        NLOHMANN_JSON_PASTE29, \
2652
        NLOHMANN_JSON_PASTE28, \
2653
        NLOHMANN_JSON_PASTE27, \
2654
        NLOHMANN_JSON_PASTE26, \
2655
        NLOHMANN_JSON_PASTE25, \
2656
        NLOHMANN_JSON_PASTE24, \
2657
        NLOHMANN_JSON_PASTE23, \
2658
        NLOHMANN_JSON_PASTE22, \
2659
        NLOHMANN_JSON_PASTE21, \
2660
        NLOHMANN_JSON_PASTE20, \
2661
        NLOHMANN_JSON_PASTE19, \
2662
        NLOHMANN_JSON_PASTE18, \
2663
        NLOHMANN_JSON_PASTE17, \
2664
        NLOHMANN_JSON_PASTE16, \
2665
        NLOHMANN_JSON_PASTE15, \
2666
        NLOHMANN_JSON_PASTE14, \
2667
        NLOHMANN_JSON_PASTE13, \
2668
        NLOHMANN_JSON_PASTE12, \
2669
        NLOHMANN_JSON_PASTE11, \
2670
        NLOHMANN_JSON_PASTE10, \
2671
        NLOHMANN_JSON_PASTE9, \
2672
        NLOHMANN_JSON_PASTE8, \
2673
        NLOHMANN_JSON_PASTE7, \
2674
        NLOHMANN_JSON_PASTE6, \
2675
        NLOHMANN_JSON_PASTE5, \
2676
        NLOHMANN_JSON_PASTE4, \
2677
        NLOHMANN_JSON_PASTE3, \
2678
        NLOHMANN_JSON_PASTE2, \
2679
        NLOHMANN_JSON_PASTE1)(__VA_ARGS__))
2680
#define NLOHMANN_JSON_PASTE2(func, v1) func(v1)
2681
#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2)
2682
#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3)
2683
#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4)
2684
#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5)
2685
#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)
2686
#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)
2687
#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)
2688
#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)
2689
#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)
2690
#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)
2691
#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)
2692
#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)
2693
#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)
2694
#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)
2695
#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)
2696
#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)
2697
#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)
2698
#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)
2699
#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)
2700
#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)
2701
#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)
2702
#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)
2703
#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)
2704
#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)
2705
#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)
2706
#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)
2707
#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)
2708
#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)
2709
#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)
2710
#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)
2711
#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)
2712
#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)
2713
#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)
2714
#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)
2715
#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)
2716
#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)
2717
#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)
2718
#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)
2719
#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)
2720
#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)
2721
#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)
2722
#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)
2723
#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)
2724
#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)
2725
#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)
2726
#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)
2727
#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)
2728
#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)
2729
#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)
2730
#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)
2731
#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)
2732
#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)
2733
#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)
2734
#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)
2735
#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)
2736
#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)
2737
#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)
2738
#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)
2739
#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)
2740
#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)
2741
#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)
2742
#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)
2743
2744
#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1;
2745
#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1);
2746
#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1);
2747
2748
/*!
2749
@brief macro
2750
@def NLOHMANN_DEFINE_TYPE_INTRUSIVE
2751
@since version 3.9.0
2752
*/
2753
#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...)  \
2754
    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__)) } \
2755
    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__)) }
2756
2757
#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...)  \
2758
    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__)) } \
2759
    friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
2760
2761
/*!
2762
@brief macro
2763
@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
2764
@since version 3.9.0
2765
*/
2766
#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...)  \
2767
    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__)) } \
2768
    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__)) }
2769
2770
#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...)  \
2771
    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__)) } \
2772
    inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
2773
2774
// inspired from https://stackoverflow.com/a/26745591
2775
// allows to call any std function as if (e.g. with begin):
2776
// using std::begin; begin(x);
2777
//
2778
// it allows using the detected idiom to retrieve the return type
2779
// of such an expression
2780
#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name)                                 \
2781
    namespace detail {                                                            \
2782
    using std::std_name;                                                          \
2783
    \
2784
    template<typename... T>                                                       \
2785
    using result_of_##std_name = decltype(std_name(std::declval<T>()...));        \
2786
    }                                                                             \
2787
    \
2788
    namespace detail2 {                                                           \
2789
    struct std_name##_tag                                                         \
2790
    {                                                                             \
2791
    };                                                                            \
2792
    \
2793
    template<typename... T>                                                       \
2794
    std_name##_tag std_name(T&&...);                                              \
2795
    \
2796
    template<typename... T>                                                       \
2797
    using result_of_##std_name = decltype(std_name(std::declval<T>()...));        \
2798
    \
2799
    template<typename... T>                                                       \
2800
    struct would_call_std_##std_name                                              \
2801
    {                                                                             \
2802
        static constexpr auto const value = ::nlohmann::detail::                  \
2803
                                            is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \
2804
    };                                                                            \
2805
    } /* namespace detail2 */ \
2806
    \
2807
    template<typename... T>                                                       \
2808
    struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...>   \
2809
    {                                                                             \
2810
    }
2811
2812
#ifndef JSON_USE_IMPLICIT_CONVERSIONS
2813
    #define JSON_USE_IMPLICIT_CONVERSIONS 1
2814
#endif
2815
2816
#if JSON_USE_IMPLICIT_CONVERSIONS
2817
    #define JSON_EXPLICIT
2818
#else
2819
    #define JSON_EXPLICIT explicit
2820
#endif
2821
2822
#ifndef JSON_DISABLE_ENUM_SERIALIZATION
2823
    #define JSON_DISABLE_ENUM_SERIALIZATION 0
2824
#endif
2825
2826
#ifndef JSON_USE_GLOBAL_UDLS
2827
    #define JSON_USE_GLOBAL_UDLS 1
2828
#endif
2829
2830
#if JSON_HAS_THREE_WAY_COMPARISON
2831
    #include <compare> // partial_ordering
2832
#endif
2833
2834
NLOHMANN_JSON_NAMESPACE_BEGIN
2835
namespace detail
2836
{
2837
2838
///////////////////////////
2839
// JSON type enumeration //
2840
///////////////////////////
2841
2842
/*!
2843
@brief the JSON type enumeration
2844
2845
This enumeration collects the different JSON types. It is internally used to
2846
distinguish the stored values, and the functions @ref basic_json::is_null(),
2847
@ref basic_json::is_object(), @ref basic_json::is_array(),
2848
@ref basic_json::is_string(), @ref basic_json::is_boolean(),
2849
@ref basic_json::is_number() (with @ref basic_json::is_number_integer(),
2850
@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()),
2851
@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and
2852
@ref basic_json::is_structured() rely on it.
2853
2854
@note There are three enumeration entries (number_integer, number_unsigned, and
2855
number_float), because the library distinguishes these three types for numbers:
2856
@ref basic_json::number_unsigned_t is used for unsigned integers,
2857
@ref basic_json::number_integer_t is used for signed integers, and
2858
@ref basic_json::number_float_t is used for floating-point numbers or to
2859
approximate integers which do not fit in the limits of their respective type.
2860
2861
@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON
2862
value with the default value for a given type
2863
2864
@since version 1.0.0
2865
*/
2866
enum class value_t : std::uint8_t
2867
{
2868
    null,             ///< null value
2869
    object,           ///< object (unordered set of name/value pairs)
2870
    array,            ///< array (ordered collection of values)
2871
    string,           ///< string value
2872
    boolean,          ///< boolean value
2873
    number_integer,   ///< number value (signed integer)
2874
    number_unsigned,  ///< number value (unsigned integer)
2875
    number_float,     ///< number value (floating-point)
2876
    binary,           ///< binary array (ordered collection of bytes)
2877
    discarded         ///< discarded by the parser callback function
2878
};
2879
2880
/*!
2881
@brief comparison operator for JSON types
2882
2883
Returns an ordering that is similar to Python:
2884
- order: null < boolean < number < object < array < string < binary
2885
- furthermore, each type is not smaller than itself
2886
- discarded values are not comparable
2887
- binary is represented as a b"" string in python and directly comparable to a
2888
  string; however, making a binary array directly comparable with a string would
2889
  be surprising behavior in a JSON file.
2890
2891
@since version 1.0.0
2892
*/
2893
#if JSON_HAS_THREE_WAY_COMPARISON
2894
    inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD*
2895
#else
2896
    inline bool operator<(const value_t lhs, const value_t rhs) noexcept
2897
#endif
2898
0
{
2899
0
    static constexpr std::array<std::uint8_t, 9> order = {{
2900
0
            0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */,
2901
0
            1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */,
2902
0
            6 /* binary */
2903
0
        }
2904
0
    };
2905
0
2906
0
    const auto l_index = static_cast<std::size_t>(lhs);
2907
0
    const auto r_index = static_cast<std::size_t>(rhs);
2908
0
#if JSON_HAS_THREE_WAY_COMPARISON
2909
0
    if (l_index < order.size() && r_index < order.size())
2910
0
    {
2911
0
        return order[l_index] <=> order[r_index]; // *NOPAD*
2912
0
    }
2913
0
    return std::partial_ordering::unordered;
2914
0
#else
2915
0
    return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index];
2916
0
#endif
2917
0
}
2918
2919
// GCC selects the built-in operator< over an operator rewritten from
2920
// a user-defined spaceship operator
2921
// Clang, MSVC, and ICC select the rewritten candidate
2922
// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200)
2923
#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__)
2924
inline bool operator<(const value_t lhs, const value_t rhs) noexcept
2925
{
2926
    return std::is_lt(lhs <=> rhs); // *NOPAD*
2927
}
2928
#endif
2929
2930
}  // namespace detail
2931
NLOHMANN_JSON_NAMESPACE_END
2932
2933
// #include <nlohmann/detail/string_escape.hpp>
2934
//     __ _____ _____ _____
2935
//  __|  |   __|     |   | |  JSON for Modern C++
2936
// |  |  |__   |  |  | | | |  version 3.11.2
2937
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
2938
//
2939
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
2940
// SPDX-License-Identifier: MIT
2941
2942
2943
2944
// #include <nlohmann/detail/abi_macros.hpp>
2945
2946
2947
NLOHMANN_JSON_NAMESPACE_BEGIN
2948
namespace detail
2949
{
2950
2951
/*!
2952
@brief replace all occurrences of a substring by another string
2953
2954
@param[in,out] s  the string to manipulate; changed so that all
2955
               occurrences of @a f are replaced with @a t
2956
@param[in]     f  the substring to replace with @a t
2957
@param[in]     t  the string to replace @a f
2958
2959
@pre The search string @a f must not be empty. **This precondition is
2960
enforced with an assertion.**
2961
2962
@since version 2.0.0
2963
*/
2964
template<typename StringType>
2965
inline void replace_substring(StringType& s, const StringType& f,
2966
                              const StringType& t)
2967
0
{
2968
0
    JSON_ASSERT(!f.empty());
2969
0
    for (auto pos = s.find(f);                // find first occurrence of f
2970
0
            pos != StringType::npos;          // make sure f was found
2971
0
            s.replace(pos, f.size(), t),      // replace with t, and
2972
0
            pos = s.find(f, pos + t.size()))  // find next occurrence of f
2973
0
    {}
2974
0
}
2975
2976
/*!
2977
 * @brief string escaping as described in RFC 6901 (Sect. 4)
2978
 * @param[in] s string to escape
2979
 * @return    escaped string
2980
 *
2981
 * Note the order of escaping "~" to "~0" and "/" to "~1" is important.
2982
 */
2983
template<typename StringType>
2984
inline StringType escape(StringType s)
2985
{
2986
    replace_substring(s, StringType{"~"}, StringType{"~0"});
2987
    replace_substring(s, StringType{"/"}, StringType{"~1"});
2988
    return s;
2989
}
2990
2991
/*!
2992
 * @brief string unescaping as described in RFC 6901 (Sect. 4)
2993
 * @param[in] s string to unescape
2994
 * @return    unescaped string
2995
 *
2996
 * Note the order of escaping "~1" to "/" and "~0" to "~" is important.
2997
 */
2998
template<typename StringType>
2999
static void unescape(StringType& s)
3000
0
{
3001
0
    replace_substring(s, StringType{"~1"}, StringType{"/"});
3002
0
    replace_substring(s, StringType{"~0"}, StringType{"~"});
3003
0
}
Unexecuted instantiation: fuzzer-parse_ubjson.cpp:void nlohmann::json_abi_v3_11_2::detail::unescape<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Unexecuted instantiation: fuzzer-parse_cbor.cpp:void nlohmann::json_abi_v3_11_2::detail::unescape<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Unexecuted instantiation: fuzzer-parse_bson.cpp:void nlohmann::json_abi_v3_11_2::detail::unescape<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Unexecuted instantiation: fuzzer-parse_msgpack.cpp:void nlohmann::json_abi_v3_11_2::detail::unescape<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Unexecuted instantiation: fuzzer-parse_bjdata.cpp:void nlohmann::json_abi_v3_11_2::detail::unescape<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Unexecuted instantiation: fuzzer-parse_json.cpp:void nlohmann::json_abi_v3_11_2::detail::unescape<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
3004
3005
}  // namespace detail
3006
NLOHMANN_JSON_NAMESPACE_END
3007
3008
// #include <nlohmann/detail/input/position_t.hpp>
3009
//     __ _____ _____ _____
3010
//  __|  |   __|     |   | |  JSON for Modern C++
3011
// |  |  |__   |  |  | | | |  version 3.11.2
3012
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
3013
//
3014
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
3015
// SPDX-License-Identifier: MIT
3016
3017
3018
3019
#include <cstddef> // size_t
3020
3021
// #include <nlohmann/detail/abi_macros.hpp>
3022
3023
3024
NLOHMANN_JSON_NAMESPACE_BEGIN
3025
namespace detail
3026
{
3027
3028
/// struct to capture the start position of the current token
3029
struct position_t
3030
{
3031
    /// the total number of characters read
3032
    std::size_t chars_read_total = 0;
3033
    /// the number of characters read in the current line
3034
    std::size_t chars_read_current_line = 0;
3035
    /// the number of lines read
3036
    std::size_t lines_read = 0;
3037
3038
    /// conversion to size_t to preserve SAX interface
3039
    constexpr operator size_t() const
3040
2.92k
    {
3041
2.92k
        return chars_read_total;
3042
2.92k
    }
3043
};
3044
3045
}  // namespace detail
3046
NLOHMANN_JSON_NAMESPACE_END
3047
3048
// #include <nlohmann/detail/macro_scope.hpp>
3049
3050
// #include <nlohmann/detail/meta/cpp_future.hpp>
3051
//     __ _____ _____ _____
3052
//  __|  |   __|     |   | |  JSON for Modern C++
3053
// |  |  |__   |  |  | | | |  version 3.11.2
3054
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
3055
//
3056
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
3057
// SPDX-FileCopyrightText: 2018 The Abseil Authors
3058
// SPDX-License-Identifier: MIT
3059
3060
3061
3062
#include <array> // array
3063
#include <cstddef> // size_t
3064
#include <type_traits> // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type
3065
#include <utility> // index_sequence, make_index_sequence, index_sequence_for
3066
3067
// #include <nlohmann/detail/macro_scope.hpp>
3068
3069
3070
NLOHMANN_JSON_NAMESPACE_BEGIN
3071
namespace detail
3072
{
3073
3074
template<typename T>
3075
using uncvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type;
3076
3077
#ifdef JSON_HAS_CPP_14
3078
3079
// the following utilities are natively available in C++14
3080
using std::enable_if_t;
3081
using std::index_sequence;
3082
using std::make_index_sequence;
3083
using std::index_sequence_for;
3084
3085
#else
3086
3087
// alias templates to reduce boilerplate
3088
template<bool B, typename T = void>
3089
using enable_if_t = typename std::enable_if<B, T>::type;
3090
3091
// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h
3092
// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0.
3093
3094
//// START OF CODE FROM GOOGLE ABSEIL
3095
3096
// integer_sequence
3097
//
3098
// Class template representing a compile-time integer sequence. An instantiation
3099
// of `integer_sequence<T, Ints...>` has a sequence of integers encoded in its
3100
// type through its template arguments (which is a common need when
3101
// working with C++11 variadic templates). `absl::integer_sequence` is designed
3102
// to be a drop-in replacement for C++14's `std::integer_sequence`.
3103
//
3104
// Example:
3105
//
3106
//   template< class T, T... Ints >
3107
//   void user_function(integer_sequence<T, Ints...>);
3108
//
3109
//   int main()
3110
//   {
3111
//     // user_function's `T` will be deduced to `int` and `Ints...`
3112
//     // will be deduced to `0, 1, 2, 3, 4`.
3113
//     user_function(make_integer_sequence<int, 5>());
3114
//   }
3115
template <typename T, T... Ints>
3116
struct integer_sequence
3117
{
3118
    using value_type = T;
3119
    static constexpr std::size_t size() noexcept
3120
    {
3121
        return sizeof...(Ints);
3122
    }
3123
};
3124
3125
// index_sequence
3126
//
3127
// A helper template for an `integer_sequence` of `size_t`,
3128
// `absl::index_sequence` is designed to be a drop-in replacement for C++14's
3129
// `std::index_sequence`.
3130
template <size_t... Ints>
3131
using index_sequence = integer_sequence<size_t, Ints...>;
3132
3133
namespace utility_internal
3134
{
3135
3136
template <typename Seq, size_t SeqSize, size_t Rem>
3137
struct Extend;
3138
3139
// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency.
3140
template <typename T, T... Ints, size_t SeqSize>
3141
struct Extend<integer_sequence<T, Ints...>, SeqSize, 0>
3142
{
3143
    using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >;
3144
};
3145
3146
template <typename T, T... Ints, size_t SeqSize>
3147
struct Extend<integer_sequence<T, Ints...>, SeqSize, 1>
3148
{
3149
    using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >;
3150
};
3151
3152
// Recursion helper for 'make_integer_sequence<T, N>'.
3153
// 'Gen<T, N>::type' is an alias for 'integer_sequence<T, 0, 1, ... N-1>'.
3154
template <typename T, size_t N>
3155
struct Gen
3156
{
3157
    using type =
3158
        typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type;
3159
};
3160
3161
template <typename T>
3162
struct Gen<T, 0>
3163
{
3164
    using type = integer_sequence<T>;
3165
};
3166
3167
}  // namespace utility_internal
3168
3169
// Compile-time sequences of integers
3170
3171
// make_integer_sequence
3172
//
3173
// This template alias is equivalent to
3174
// `integer_sequence<int, 0, 1, ..., N-1>`, and is designed to be a drop-in
3175
// replacement for C++14's `std::make_integer_sequence`.
3176
template <typename T, T N>
3177
using make_integer_sequence = typename utility_internal::Gen<T, N>::type;
3178
3179
// make_index_sequence
3180
//
3181
// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`,
3182
// and is designed to be a drop-in replacement for C++14's
3183
// `std::make_index_sequence`.
3184
template <size_t N>
3185
using make_index_sequence = make_integer_sequence<size_t, N>;
3186
3187
// index_sequence_for
3188
//
3189
// Converts a typename pack into an index sequence of the same length, and
3190
// is designed to be a drop-in replacement for C++14's
3191
// `std::index_sequence_for()`
3192
template <typename... Ts>
3193
using index_sequence_for = make_index_sequence<sizeof...(Ts)>;
3194
3195
//// END OF CODE FROM GOOGLE ABSEIL
3196
3197
#endif
3198
3199
// dispatch utility (taken from ranges-v3)
3200
template<unsigned N> struct priority_tag : priority_tag < N - 1 > {};
3201
template<> struct priority_tag<0> {};
3202
3203
// taken from ranges-v3
3204
template<typename T>
3205
struct static_const
3206
{
3207
    static JSON_INLINE_VARIABLE constexpr T value{};
3208
};
3209
3210
#ifndef JSON_HAS_CPP_17
3211
    template<typename T>
3212
    constexpr T static_const<T>::value;
3213
#endif
3214
3215
template<typename T, typename... Args>
3216
inline constexpr std::array<T, sizeof...(Args)> make_array(Args&& ... args)
3217
81.1k
{
3218
81.1k
    return std::array<T, sizeof...(Args)> {{static_cast<T>(std::forward<Args>(args))...}};
3219
81.1k
}
std::__1::array<int, 8> nlohmann::json_abi_v3_11_2::detail::make_array<int, char, char, char, char, char, char, char, char>(char&&, char&&, char&&, char&&, char&&, char&&, char&&, char&&)
Line
Count
Source
3217
40.5k
{
3218
40.5k
    return std::array<T, sizeof...(Args)> {{static_cast<T>(std::forward<Args>(args))...}};
3219
40.5k
}
std::__1::array<std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, 11> nlohmann::json_abi_v3_11_2::detail::make_array<std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&, std::__1::pair<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&)
Line
Count
Source
3217
40.5k
{
3218
40.5k
    return std::array<T, sizeof...(Args)> {{static_cast<T>(std::forward<Args>(args))...}};
3219
40.5k
}
3220
3221
}  // namespace detail
3222
NLOHMANN_JSON_NAMESPACE_END
3223
3224
// #include <nlohmann/detail/meta/type_traits.hpp>
3225
//     __ _____ _____ _____
3226
//  __|  |   __|     |   | |  JSON for Modern C++
3227
// |  |  |__   |  |  | | | |  version 3.11.2
3228
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
3229
//
3230
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
3231
// SPDX-License-Identifier: MIT
3232
3233
3234
3235
#include <limits> // numeric_limits
3236
#include <type_traits> // false_type, is_constructible, is_integral, is_same, true_type
3237
#include <utility> // declval
3238
#include <tuple> // tuple
3239
3240
// #include <nlohmann/detail/iterators/iterator_traits.hpp>
3241
//     __ _____ _____ _____
3242
//  __|  |   __|     |   | |  JSON for Modern C++
3243
// |  |  |__   |  |  | | | |  version 3.11.2
3244
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
3245
//
3246
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
3247
// SPDX-License-Identifier: MIT
3248
3249
3250
3251
#include <iterator> // random_access_iterator_tag
3252
3253
// #include <nlohmann/detail/abi_macros.hpp>
3254
3255
// #include <nlohmann/detail/meta/void_t.hpp>
3256
3257
// #include <nlohmann/detail/meta/cpp_future.hpp>
3258
3259
3260
NLOHMANN_JSON_NAMESPACE_BEGIN
3261
namespace detail
3262
{
3263
3264
template<typename It, typename = void>
3265
struct iterator_types {};
3266
3267
template<typename It>
3268
struct iterator_types <
3269
    It,
3270
    void_t<typename It::difference_type, typename It::value_type, typename It::pointer,
3271
    typename It::reference, typename It::iterator_category >>
3272
{
3273
    using difference_type = typename It::difference_type;
3274
    using value_type = typename It::value_type;
3275
    using pointer = typename It::pointer;
3276
    using reference = typename It::reference;
3277
    using iterator_category = typename It::iterator_category;
3278
};
3279
3280
// This is required as some compilers implement std::iterator_traits in a way that
3281
// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341.
3282
template<typename T, typename = void>
3283
struct iterator_traits
3284
{
3285
};
3286
3287
template<typename T>
3288
struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >>
3289
            : iterator_types<T>
3290
{
3291
};
3292
3293
template<typename T>
3294
struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
3295
{
3296
    using iterator_category = std::random_access_iterator_tag;
3297
    using value_type = T;
3298
    using difference_type = ptrdiff_t;
3299
    using pointer = T*;
3300
    using reference = T&;
3301
};
3302
3303
}  // namespace detail
3304
NLOHMANN_JSON_NAMESPACE_END
3305
3306
// #include <nlohmann/detail/macro_scope.hpp>
3307
3308
// #include <nlohmann/detail/meta/call_std/begin.hpp>
3309
//     __ _____ _____ _____
3310
//  __|  |   __|     |   | |  JSON for Modern C++
3311
// |  |  |__   |  |  | | | |  version 3.11.2
3312
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
3313
//
3314
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
3315
// SPDX-License-Identifier: MIT
3316
3317
3318
3319
// #include <nlohmann/detail/macro_scope.hpp>
3320
3321
3322
NLOHMANN_JSON_NAMESPACE_BEGIN
3323
3324
NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin);
3325
3326
NLOHMANN_JSON_NAMESPACE_END
3327
3328
// #include <nlohmann/detail/meta/call_std/end.hpp>
3329
//     __ _____ _____ _____
3330
//  __|  |   __|     |   | |  JSON for Modern C++
3331
// |  |  |__   |  |  | | | |  version 3.11.2
3332
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
3333
//
3334
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
3335
// SPDX-License-Identifier: MIT
3336
3337
3338
3339
// #include <nlohmann/detail/macro_scope.hpp>
3340
3341
3342
NLOHMANN_JSON_NAMESPACE_BEGIN
3343
3344
NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end);
3345
3346
NLOHMANN_JSON_NAMESPACE_END
3347
3348
// #include <nlohmann/detail/meta/cpp_future.hpp>
3349
3350
// #include <nlohmann/detail/meta/detected.hpp>
3351
3352
// #include <nlohmann/json_fwd.hpp>
3353
//     __ _____ _____ _____
3354
//  __|  |   __|     |   | |  JSON for Modern C++
3355
// |  |  |__   |  |  | | | |  version 3.11.2
3356
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
3357
//
3358
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
3359
// SPDX-License-Identifier: MIT
3360
3361
#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_
3362
    #define INCLUDE_NLOHMANN_JSON_FWD_HPP_
3363
3364
    #include <cstdint> // int64_t, uint64_t
3365
    #include <map> // map
3366
    #include <memory> // allocator
3367
    #include <string> // string
3368
    #include <vector> // vector
3369
3370
    // #include <nlohmann/detail/abi_macros.hpp>
3371
3372
3373
    /*!
3374
    @brief namespace for Niels Lohmann
3375
    @see https://github.com/nlohmann
3376
    @since version 1.0.0
3377
    */
3378
    NLOHMANN_JSON_NAMESPACE_BEGIN
3379
3380
    /*!
3381
    @brief default JSONSerializer template argument
3382
3383
    This serializer ignores the template arguments and uses ADL
3384
    ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl))
3385
    for serialization.
3386
    */
3387
    template<typename T = void, typename SFINAE = void>
3388
    struct adl_serializer;
3389
3390
    /// a class to store JSON values
3391
    /// @sa https://json.nlohmann.me/api/basic_json/
3392
    template<template<typename U, typename V, typename... Args> class ObjectType =
3393
    std::map,
3394
    template<typename U, typename... Args> class ArrayType = std::vector,
3395
    class StringType = std::string, class BooleanType = bool,
3396
    class NumberIntegerType = std::int64_t,
3397
    class NumberUnsignedType = std::uint64_t,
3398
    class NumberFloatType = double,
3399
    template<typename U> class AllocatorType = std::allocator,
3400
    template<typename T, typename SFINAE = void> class JSONSerializer =
3401
    adl_serializer,
3402
    class BinaryType = std::vector<std::uint8_t>, // cppcheck-suppress syntaxError
3403
    class CustomBaseClass = void>
3404
    class basic_json;
3405
3406
    /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document
3407
    /// @sa https://json.nlohmann.me/api/json_pointer/
3408
    template<typename RefStringType>
3409
    class json_pointer;
3410
3411
    /*!
3412
    @brief default specialization
3413
    @sa https://json.nlohmann.me/api/json/
3414
    */
3415
    using json = basic_json<>;
3416
3417
    /// @brief a minimal map-like container that preserves insertion order
3418
    /// @sa https://json.nlohmann.me/api/ordered_map/
3419
    template<class Key, class T, class IgnoredLess, class Allocator>
3420
    struct ordered_map;
3421
3422
    /// @brief specialization that maintains the insertion order of object keys
3423
    /// @sa https://json.nlohmann.me/api/ordered_json/
3424
    using ordered_json = basic_json<nlohmann::ordered_map>;
3425
3426
    NLOHMANN_JSON_NAMESPACE_END
3427
3428
#endif  // INCLUDE_NLOHMANN_JSON_FWD_HPP_
3429
3430
3431
NLOHMANN_JSON_NAMESPACE_BEGIN
3432
/*!
3433
@brief detail namespace with internal helper functions
3434
3435
This namespace collects functions that should not be exposed,
3436
implementations of some @ref basic_json methods, and meta-programming helpers.
3437
3438
@since version 2.1.0
3439
*/
3440
namespace detail
3441
{
3442
3443
/////////////
3444
// helpers //
3445
/////////////
3446
3447
// Note to maintainers:
3448
//
3449
// Every trait in this file expects a non CV-qualified type.
3450
// The only exceptions are in the 'aliases for detected' section
3451
// (i.e. those of the form: decltype(T::member_function(std::declval<T>())))
3452
//
3453
// In this case, T has to be properly CV-qualified to constraint the function arguments
3454
// (e.g. to_json(BasicJsonType&, const T&))
3455
3456
template<typename> struct is_basic_json : std::false_type {};
3457
3458
NLOHMANN_BASIC_JSON_TPL_DECLARATION
3459
struct is_basic_json<NLOHMANN_BASIC_JSON_TPL> : std::true_type {};
3460
3461
// used by exceptions create() member functions
3462
// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t
3463
// false_type otherwise
3464
template<typename BasicJsonContext>
3465
struct is_basic_json_context :
3466
    std::integral_constant < bool,
3467
    is_basic_json<typename std::remove_cv<typename std::remove_pointer<BasicJsonContext>::type>::type>::value
3468
    || std::is_same<BasicJsonContext, std::nullptr_t>::value >
3469
{};
3470
3471
//////////////////////
3472
// json_ref helpers //
3473
//////////////////////
3474
3475
template<typename>
3476
class json_ref;
3477
3478
template<typename>
3479
struct is_json_ref : std::false_type {};
3480
3481
template<typename T>
3482
struct is_json_ref<json_ref<T>> : std::true_type {};
3483
3484
//////////////////////////
3485
// aliases for detected //
3486
//////////////////////////
3487
3488
template<typename T>
3489
using mapped_type_t = typename T::mapped_type;
3490
3491
template<typename T>
3492
using key_type_t = typename T::key_type;
3493
3494
template<typename T>
3495
using value_type_t = typename T::value_type;
3496
3497
template<typename T>
3498
using difference_type_t = typename T::difference_type;
3499
3500
template<typename T>
3501
using pointer_t = typename T::pointer;
3502
3503
template<typename T>
3504
using reference_t = typename T::reference;
3505
3506
template<typename T>
3507
using iterator_category_t = typename T::iterator_category;
3508
3509
template<typename T, typename... Args>
3510
using to_json_function = decltype(T::to_json(std::declval<Args>()...));
3511
3512
template<typename T, typename... Args>
3513
using from_json_function = decltype(T::from_json(std::declval<Args>()...));
3514
3515
template<typename T, typename U>
3516
using get_template_function = decltype(std::declval<T>().template get<U>());
3517
3518
// trait checking if JSONSerializer<T>::from_json(json const&, udt&) exists
3519
template<typename BasicJsonType, typename T, typename = void>
3520
struct has_from_json : std::false_type {};
3521
3522
// trait checking if j.get<T> is valid
3523
// use this trait instead of std::is_constructible or std::is_convertible,
3524
// both rely on, or make use of implicit conversions, and thus fail when T
3525
// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958)
3526
template <typename BasicJsonType, typename T>
3527
struct is_getable
3528
{
3529
    static constexpr bool value = is_detected<get_template_function, const BasicJsonType&, T>::value;
3530
};
3531
3532
template<typename BasicJsonType, typename T>
3533
struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >>
3534
{
3535
    using serializer = typename BasicJsonType::template json_serializer<T, void>;
3536
3537
    static constexpr bool value =
3538
        is_detected_exact<void, from_json_function, serializer,
3539
        const BasicJsonType&, T&>::value;
3540
};
3541
3542
// This trait checks if JSONSerializer<T>::from_json(json const&) exists
3543
// this overload is used for non-default-constructible user-defined-types
3544
template<typename BasicJsonType, typename T, typename = void>
3545
struct has_non_default_from_json : std::false_type {};
3546
3547
template<typename BasicJsonType, typename T>
3548
struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >>
3549
{
3550
    using serializer = typename BasicJsonType::template json_serializer<T, void>;
3551
3552
    static constexpr bool value =
3553
        is_detected_exact<T, from_json_function, serializer,
3554
        const BasicJsonType&>::value;
3555
};
3556
3557
// This trait checks if BasicJsonType::json_serializer<T>::to_json exists
3558
// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion.
3559
template<typename BasicJsonType, typename T, typename = void>
3560
struct has_to_json : std::false_type {};
3561
3562
template<typename BasicJsonType, typename T>
3563
struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >>
3564
{
3565
    using serializer = typename BasicJsonType::template json_serializer<T, void>;
3566
3567
    static constexpr bool value =
3568
        is_detected_exact<void, to_json_function, serializer, BasicJsonType&,
3569
        T>::value;
3570
};
3571
3572
template<typename T>
3573
using detect_key_compare = typename T::key_compare;
3574
3575
template<typename T>
3576
struct has_key_compare : std::integral_constant<bool, is_detected<detect_key_compare, T>::value> {};
3577
3578
// obtains the actual object key comparator
3579
template<typename BasicJsonType>
3580
struct actual_object_comparator
3581
{
3582
    using object_t = typename BasicJsonType::object_t;
3583
    using object_comparator_t = typename BasicJsonType::default_object_comparator_t;
3584
    using type = typename std::conditional < has_key_compare<object_t>::value,
3585
          typename object_t::key_compare, object_comparator_t>::type;
3586
};
3587
3588
template<typename BasicJsonType>
3589
using actual_object_comparator_t = typename actual_object_comparator<BasicJsonType>::type;
3590
3591
///////////////////
3592
// is_ functions //
3593
///////////////////
3594
3595
// https://en.cppreference.com/w/cpp/types/conjunction
3596
template<class...> struct conjunction : std::true_type { };
3597
template<class B> struct conjunction<B> : B { };
3598
template<class B, class... Bn>
3599
struct conjunction<B, Bn...>
3600
: std::conditional<static_cast<bool>(B::value), conjunction<Bn...>, B>::type {};
3601
3602
// https://en.cppreference.com/w/cpp/types/negation
3603
template<class B> struct negation : std::integral_constant < bool, !B::value > { };
3604
3605
// Reimplementation of is_constructible and is_default_constructible, due to them being broken for
3606
// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367).
3607
// This causes compile errors in e.g. clang 3.5 or gcc 4.9.
3608
template <typename T>
3609
struct is_default_constructible : std::is_default_constructible<T> {};
3610
3611
template <typename T1, typename T2>
3612
struct is_default_constructible<std::pair<T1, T2>>
3613
            : conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {};
3614
3615
template <typename T1, typename T2>
3616
struct is_default_constructible<const std::pair<T1, T2>>
3617
            : conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {};
3618
3619
template <typename... Ts>
3620
struct is_default_constructible<std::tuple<Ts...>>
3621
            : conjunction<is_default_constructible<Ts>...> {};
3622
3623
template <typename... Ts>
3624
struct is_default_constructible<const std::tuple<Ts...>>
3625
            : conjunction<is_default_constructible<Ts>...> {};
3626
3627
template <typename T, typename... Args>
3628
struct is_constructible : std::is_constructible<T, Args...> {};
3629
3630
template <typename T1, typename T2>
3631
struct is_constructible<std::pair<T1, T2>> : is_default_constructible<std::pair<T1, T2>> {};
3632
3633
template <typename T1, typename T2>
3634
struct is_constructible<const std::pair<T1, T2>> : is_default_constructible<const std::pair<T1, T2>> {};
3635
3636
template <typename... Ts>
3637
struct is_constructible<std::tuple<Ts...>> : is_default_constructible<std::tuple<Ts...>> {};
3638
3639
template <typename... Ts>
3640
struct is_constructible<const std::tuple<Ts...>> : is_default_constructible<const std::tuple<Ts...>> {};
3641
3642
template<typename T, typename = void>
3643
struct is_iterator_traits : std::false_type {};
3644
3645
template<typename T>
3646
struct is_iterator_traits<iterator_traits<T>>
3647
{
3648
  private:
3649
    using traits = iterator_traits<T>;
3650
3651
  public:
3652
    static constexpr auto value =
3653
        is_detected<value_type_t, traits>::value &&
3654
        is_detected<difference_type_t, traits>::value &&
3655
        is_detected<pointer_t, traits>::value &&
3656
        is_detected<iterator_category_t, traits>::value &&
3657
        is_detected<reference_t, traits>::value;
3658
};
3659
3660
template<typename T>
3661
struct is_range
3662
{
3663
  private:
3664
    using t_ref = typename std::add_lvalue_reference<T>::type;
3665
3666
    using iterator = detected_t<result_of_begin, t_ref>;
3667
    using sentinel = detected_t<result_of_end, t_ref>;
3668
3669
    // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator
3670
    // and https://en.cppreference.com/w/cpp/iterator/sentinel_for
3671
    // but reimplementing these would be too much work, as a lot of other concepts are used underneath
3672
    static constexpr auto is_iterator_begin =
3673
        is_iterator_traits<iterator_traits<iterator>>::value;
3674
3675
  public:
3676
    static constexpr bool value = !std::is_same<iterator, nonesuch>::value && !std::is_same<sentinel, nonesuch>::value && is_iterator_begin;
3677
};
3678
3679
template<typename R>
3680
using iterator_t = enable_if_t<is_range<R>::value, result_of_begin<decltype(std::declval<R&>())>>;
3681
3682
template<typename T>
3683
using range_value_t = value_type_t<iterator_traits<iterator_t<T>>>;
3684
3685
// The following implementation of is_complete_type is taken from
3686
// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/
3687
// and is written by Xiang Fan who agreed to using it in this library.
3688
3689
template<typename T, typename = void>
3690
struct is_complete_type : std::false_type {};
3691
3692
template<typename T>
3693
struct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_type {};
3694
3695
template<typename BasicJsonType, typename CompatibleObjectType,
3696
         typename = void>
3697
struct is_compatible_object_type_impl : std::false_type {};
3698
3699
template<typename BasicJsonType, typename CompatibleObjectType>
3700
struct is_compatible_object_type_impl <
3701
    BasicJsonType, CompatibleObjectType,
3702
    enable_if_t < is_detected<mapped_type_t, CompatibleObjectType>::value&&
3703
    is_detected<key_type_t, CompatibleObjectType>::value >>
3704
{
3705
    using object_t = typename BasicJsonType::object_t;
3706
3707
    // macOS's is_constructible does not play well with nonesuch...
3708
    static constexpr bool value =
3709
        is_constructible<typename object_t::key_type,
3710
        typename CompatibleObjectType::key_type>::value &&
3711
        is_constructible<typename object_t::mapped_type,
3712
        typename CompatibleObjectType::mapped_type>::value;
3713
};
3714
3715
template<typename BasicJsonType, typename CompatibleObjectType>
3716
struct is_compatible_object_type
3717
    : is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType> {};
3718
3719
template<typename BasicJsonType, typename ConstructibleObjectType,
3720
         typename = void>
3721
struct is_constructible_object_type_impl : std::false_type {};
3722
3723
template<typename BasicJsonType, typename ConstructibleObjectType>
3724
struct is_constructible_object_type_impl <
3725
    BasicJsonType, ConstructibleObjectType,
3726
    enable_if_t < is_detected<mapped_type_t, ConstructibleObjectType>::value&&
3727
    is_detected<key_type_t, ConstructibleObjectType>::value >>
3728
{
3729
    using object_t = typename BasicJsonType::object_t;
3730
3731
    static constexpr bool value =
3732
        (is_default_constructible<ConstructibleObjectType>::value &&
3733
         (std::is_move_assignable<ConstructibleObjectType>::value ||
3734
          std::is_copy_assignable<ConstructibleObjectType>::value) &&
3735
         (is_constructible<typename ConstructibleObjectType::key_type,
3736
          typename object_t::key_type>::value &&
3737
          std::is_same <
3738
          typename object_t::mapped_type,
3739
          typename ConstructibleObjectType::mapped_type >::value)) ||
3740
        (has_from_json<BasicJsonType,
3741
         typename ConstructibleObjectType::mapped_type>::value ||
3742
         has_non_default_from_json <
3743
         BasicJsonType,
3744
         typename ConstructibleObjectType::mapped_type >::value);
3745
};
3746
3747
template<typename BasicJsonType, typename ConstructibleObjectType>
3748
struct is_constructible_object_type
3749
    : is_constructible_object_type_impl<BasicJsonType,
3750
      ConstructibleObjectType> {};
3751
3752
template<typename BasicJsonType, typename CompatibleStringType>
3753
struct is_compatible_string_type
3754
{
3755
    static constexpr auto value =
3756
        is_constructible<typename BasicJsonType::string_t, CompatibleStringType>::value;
3757
};
3758
3759
template<typename BasicJsonType, typename ConstructibleStringType>
3760
struct is_constructible_string_type
3761
{
3762
    // launder type through decltype() to fix compilation failure on ICPC
3763
#ifdef __INTEL_COMPILER
3764
    using laundered_type = decltype(std::declval<ConstructibleStringType>());
3765
#else
3766
    using laundered_type = ConstructibleStringType;
3767
#endif
3768
3769
    static constexpr auto value =
3770
        conjunction <
3771
        is_constructible<laundered_type, typename BasicJsonType::string_t>,
3772
        is_detected_exact<typename BasicJsonType::string_t::value_type,
3773
        value_type_t, laundered_type >>::value;
3774
};
3775
3776
template<typename BasicJsonType, typename CompatibleArrayType, typename = void>
3777
struct is_compatible_array_type_impl : std::false_type {};
3778
3779
template<typename BasicJsonType, typename CompatibleArrayType>
3780
struct is_compatible_array_type_impl <
3781
    BasicJsonType, CompatibleArrayType,
3782
    enable_if_t <
3783
    is_detected<iterator_t, CompatibleArrayType>::value&&
3784
    is_iterator_traits<iterator_traits<detected_t<iterator_t, CompatibleArrayType>>>::value&&
3785
// special case for types like std::filesystem::path whose iterator's value_type are themselves
3786
// c.f. https://github.com/nlohmann/json/pull/3073
3787
    !std::is_same<CompatibleArrayType, detected_t<range_value_t, CompatibleArrayType>>::value >>
3788
{
3789
    static constexpr bool value =
3790
        is_constructible<BasicJsonType,
3791
        range_value_t<CompatibleArrayType>>::value;
3792
};
3793
3794
template<typename BasicJsonType, typename CompatibleArrayType>
3795
struct is_compatible_array_type
3796
    : is_compatible_array_type_impl<BasicJsonType, CompatibleArrayType> {};
3797
3798
template<typename BasicJsonType, typename ConstructibleArrayType, typename = void>
3799
struct is_constructible_array_type_impl : std::false_type {};
3800
3801
template<typename BasicJsonType, typename ConstructibleArrayType>
3802
struct is_constructible_array_type_impl <
3803
    BasicJsonType, ConstructibleArrayType,
3804
    enable_if_t<std::is_same<ConstructibleArrayType,
3805
    typename BasicJsonType::value_type>::value >>
3806
            : std::true_type {};
3807
3808
template<typename BasicJsonType, typename ConstructibleArrayType>
3809
struct is_constructible_array_type_impl <
3810
    BasicJsonType, ConstructibleArrayType,
3811
    enable_if_t < !std::is_same<ConstructibleArrayType,
3812
    typename BasicJsonType::value_type>::value&&
3813
    !is_compatible_string_type<BasicJsonType, ConstructibleArrayType>::value&&
3814
    is_default_constructible<ConstructibleArrayType>::value&&
3815
(std::is_move_assignable<ConstructibleArrayType>::value ||
3816
 std::is_copy_assignable<ConstructibleArrayType>::value)&&
3817
is_detected<iterator_t, ConstructibleArrayType>::value&&
3818
is_iterator_traits<iterator_traits<detected_t<iterator_t, ConstructibleArrayType>>>::value&&
3819
is_detected<range_value_t, ConstructibleArrayType>::value&&
3820
// special case for types like std::filesystem::path whose iterator's value_type are themselves
3821
// c.f. https://github.com/nlohmann/json/pull/3073
3822
!std::is_same<ConstructibleArrayType, detected_t<range_value_t, ConstructibleArrayType>>::value&&
3823
        is_complete_type <
3824
        detected_t<range_value_t, ConstructibleArrayType >>::value >>
3825
{
3826
    using value_type = range_value_t<ConstructibleArrayType>;
3827
3828
    static constexpr bool value =
3829
        std::is_same<value_type,
3830
        typename BasicJsonType::array_t::value_type>::value ||
3831
        has_from_json<BasicJsonType,
3832
        value_type>::value ||
3833
        has_non_default_from_json <
3834
        BasicJsonType,
3835
        value_type >::value;
3836
};
3837
3838
template<typename BasicJsonType, typename ConstructibleArrayType>
3839
struct is_constructible_array_type
3840
    : is_constructible_array_type_impl<BasicJsonType, ConstructibleArrayType> {};
3841
3842
template<typename RealIntegerType, typename CompatibleNumberIntegerType,
3843
         typename = void>
3844
struct is_compatible_integer_type_impl : std::false_type {};
3845
3846
template<typename RealIntegerType, typename CompatibleNumberIntegerType>
3847
struct is_compatible_integer_type_impl <
3848
    RealIntegerType, CompatibleNumberIntegerType,
3849
    enable_if_t < std::is_integral<RealIntegerType>::value&&
3850
    std::is_integral<CompatibleNumberIntegerType>::value&&
3851
    !std::is_same<bool, CompatibleNumberIntegerType>::value >>
3852
{
3853
    // is there an assert somewhere on overflows?
3854
    using RealLimits = std::numeric_limits<RealIntegerType>;
3855
    using CompatibleLimits = std::numeric_limits<CompatibleNumberIntegerType>;
3856
3857
    static constexpr auto value =
3858
        is_constructible<RealIntegerType,
3859
        CompatibleNumberIntegerType>::value &&
3860
        CompatibleLimits::is_integer &&
3861
        RealLimits::is_signed == CompatibleLimits::is_signed;
3862
};
3863
3864
template<typename RealIntegerType, typename CompatibleNumberIntegerType>
3865
struct is_compatible_integer_type
3866
    : is_compatible_integer_type_impl<RealIntegerType,
3867
      CompatibleNumberIntegerType> {};
3868
3869
template<typename BasicJsonType, typename CompatibleType, typename = void>
3870
struct is_compatible_type_impl: std::false_type {};
3871
3872
template<typename BasicJsonType, typename CompatibleType>
3873
struct is_compatible_type_impl <
3874
    BasicJsonType, CompatibleType,
3875
    enable_if_t<is_complete_type<CompatibleType>::value >>
3876
{
3877
    static constexpr bool value =
3878
        has_to_json<BasicJsonType, CompatibleType>::value;
3879
};
3880
3881
template<typename BasicJsonType, typename CompatibleType>
3882
struct is_compatible_type
3883
    : is_compatible_type_impl<BasicJsonType, CompatibleType> {};
3884
3885
template<typename T1, typename T2>
3886
struct is_constructible_tuple : std::false_type {};
3887
3888
template<typename T1, typename... Args>
3889
struct is_constructible_tuple<T1, std::tuple<Args...>> : conjunction<is_constructible<T1, Args>...> {};
3890
3891
template<typename BasicJsonType, typename T>
3892
struct is_json_iterator_of : std::false_type {};
3893
3894
template<typename BasicJsonType>
3895
struct is_json_iterator_of<BasicJsonType, typename BasicJsonType::iterator> : std::true_type {};
3896
3897
template<typename BasicJsonType>
3898
struct is_json_iterator_of<BasicJsonType, typename BasicJsonType::const_iterator> : std::true_type
3899
{};
3900
3901
// checks if a given type T is a template specialization of Primary
3902
template<template <typename...> class Primary, typename T>
3903
struct is_specialization_of : std::false_type {};
3904
3905
template<template <typename...> class Primary, typename... Args>
3906
struct is_specialization_of<Primary, Primary<Args...>> : std::true_type {};
3907
3908
template<typename T>
3909
using is_json_pointer = is_specialization_of<::nlohmann::json_pointer, uncvref_t<T>>;
3910
3911
// checks if A and B are comparable using Compare functor
3912
template<typename Compare, typename A, typename B, typename = void>
3913
struct is_comparable : std::false_type {};
3914
3915
template<typename Compare, typename A, typename B>
3916
struct is_comparable<Compare, A, B, void_t<
3917
decltype(std::declval<Compare>()(std::declval<A>(), std::declval<B>())),
3918
decltype(std::declval<Compare>()(std::declval<B>(), std::declval<A>()))
3919
>> : std::true_type {};
3920
3921
template<typename T>
3922
using detect_is_transparent = typename T::is_transparent;
3923
3924
// type trait to check if KeyType can be used as object key (without a BasicJsonType)
3925
// see is_usable_as_basic_json_key_type below
3926
template<typename Comparator, typename ObjectKeyType, typename KeyTypeCVRef, bool RequireTransparentComparator = true,
3927
         bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>>
3928
using is_usable_as_key_type = typename std::conditional <
3929
                              is_comparable<Comparator, ObjectKeyType, KeyTypeCVRef>::value
3930
                              && !(ExcludeObjectKeyType && std::is_same<KeyType,
3931
                                   ObjectKeyType>::value)
3932
                              && (!RequireTransparentComparator
3933
                                  || is_detected <detect_is_transparent, Comparator>::value)
3934
                              && !is_json_pointer<KeyType>::value,
3935
                              std::true_type,
3936
                              std::false_type >::type;
3937
3938
// type trait to check if KeyType can be used as object key
3939
// true if:
3940
//   - KeyType is comparable with BasicJsonType::object_t::key_type
3941
//   - if ExcludeObjectKeyType is true, KeyType is not BasicJsonType::object_t::key_type
3942
//   - the comparator is transparent or RequireTransparentComparator is false
3943
//   - KeyType is not a JSON iterator or json_pointer
3944
template<typename BasicJsonType, typename KeyTypeCVRef, bool RequireTransparentComparator = true,
3945
         bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>>
3946
using is_usable_as_basic_json_key_type = typename std::conditional <
3947
        is_usable_as_key_type<typename BasicJsonType::object_comparator_t,
3948
        typename BasicJsonType::object_t::key_type, KeyTypeCVRef,
3949
        RequireTransparentComparator, ExcludeObjectKeyType>::value
3950
        && !is_json_iterator_of<BasicJsonType, KeyType>::value,
3951
        std::true_type,
3952
        std::false_type >::type;
3953
3954
template<typename ObjectType, typename KeyType>
3955
using detect_erase_with_key_type = decltype(std::declval<ObjectType&>().erase(std::declval<KeyType>()));
3956
3957
// type trait to check if object_t has an erase() member functions accepting KeyType
3958
template<typename BasicJsonType, typename KeyType>
3959
using has_erase_with_key_type = typename std::conditional <
3960
                                is_detected <
3961
                                detect_erase_with_key_type,
3962
                                typename BasicJsonType::object_t, KeyType >::value,
3963
                                std::true_type,
3964
                                std::false_type >::type;
3965
3966
// a naive helper to check if a type is an ordered_map (exploits the fact that
3967
// ordered_map inherits capacity() from std::vector)
3968
template <typename T>
3969
struct is_ordered_map
3970
{
3971
    using one = char;
3972
3973
    struct two
3974
    {
3975
        char x[2]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
3976
    };
3977
3978
    template <typename C> static one test( decltype(&C::capacity) ) ;
3979
    template <typename C> static two test(...);
3980
3981
    enum { value = sizeof(test<T>(nullptr)) == sizeof(char) }; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
3982
};
3983
3984
// to avoid useless casts (see https://github.com/nlohmann/json/issues/2893#issuecomment-889152324)
3985
template < typename T, typename U, enable_if_t < !std::is_same<T, U>::value, int > = 0 >
3986
T conditional_static_cast(U value)
3987
104k
{
3988
104k
    return static_cast<T>(value);
3989
104k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::conditional_static_cast<unsigned long, unsigned int, 0>(unsigned int)
Line
Count
Source
3987
104k
{
3988
104k
    return static_cast<T>(value);
3989
104k
}
Unexecuted instantiation: unsigned long nlohmann::json_abi_v3_11_2::detail::conditional_static_cast<unsigned long, unsigned char, 0>(unsigned char)
Unexecuted instantiation: unsigned long nlohmann::json_abi_v3_11_2::detail::conditional_static_cast<unsigned long, unsigned short, 0>(unsigned short)
3990
3991
template<typename T, typename U, enable_if_t<std::is_same<T, U>::value, int> = 0>
3992
T conditional_static_cast(U value)
3993
1.17k
{
3994
1.17k
    return value;
3995
1.17k
}
3996
3997
template<typename... Types>
3998
using all_integral = conjunction<std::is_integral<Types>...>;
3999
4000
template<typename... Types>
4001
using all_signed = conjunction<std::is_signed<Types>...>;
4002
4003
template<typename... Types>
4004
using all_unsigned = conjunction<std::is_unsigned<Types>...>;
4005
4006
// there's a disjunction trait in another PR; replace when merged
4007
template<typename... Types>
4008
using same_sign = std::integral_constant < bool,
4009
      all_signed<Types...>::value || all_unsigned<Types...>::value >;
4010
4011
template<typename OfType, typename T>
4012
using never_out_of_range = std::integral_constant < bool,
4013
      (std::is_signed<OfType>::value && (sizeof(T) < sizeof(OfType)))
4014
      || (same_sign<OfType, T>::value && sizeof(OfType) == sizeof(T)) >;
4015
4016
template<typename OfType, typename T,
4017
         bool OfTypeSigned = std::is_signed<OfType>::value,
4018
         bool TSigned = std::is_signed<T>::value>
4019
struct value_in_range_of_impl2;
4020
4021
template<typename OfType, typename T>
4022
struct value_in_range_of_impl2<OfType, T, false, false>
4023
{
4024
    static constexpr bool test(T val)
4025
    {
4026
        using CommonType = typename std::common_type<OfType, T>::type;
4027
        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
4028
    }
4029
};
4030
4031
template<typename OfType, typename T>
4032
struct value_in_range_of_impl2<OfType, T, true, false>
4033
{
4034
    static constexpr bool test(T val)
4035
    {
4036
        using CommonType = typename std::common_type<OfType, T>::type;
4037
        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
4038
    }
4039
};
4040
4041
template<typename OfType, typename T>
4042
struct value_in_range_of_impl2<OfType, T, false, true>
4043
{
4044
    static constexpr bool test(T val)
4045
327
    {
4046
327
        using CommonType = typename std::common_type<OfType, T>::type;
4047
327
        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
4048
327
    }
4049
};
4050
4051
template<typename OfType, typename T>
4052
struct value_in_range_of_impl2<OfType, T, true, true>
4053
{
4054
    static constexpr bool test(T val)
4055
    {
4056
        using CommonType = typename std::common_type<OfType, T>::type;
4057
        return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)())
4058
               && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
4059
    }
4060
};
4061
4062
template<typename OfType, typename T,
4063
         bool NeverOutOfRange = never_out_of_range<OfType, T>::value,
4064
         typename = detail::enable_if_t<all_integral<OfType, T>::value>>
4065
struct value_in_range_of_impl1;
4066
4067
template<typename OfType, typename T>
4068
struct value_in_range_of_impl1<OfType, T, false>
4069
{
4070
    static constexpr bool test(T val)
4071
327
    {
4072
327
        return value_in_range_of_impl2<OfType, T>::test(val);
4073
327
    }
4074
};
4075
4076
template<typename OfType, typename T>
4077
struct value_in_range_of_impl1<OfType, T, true>
4078
{
4079
    static constexpr bool test(T /*val*/)
4080
850
    {
4081
850
        return true;
4082
850
    }
4083
};
4084
4085
template<typename OfType, typename T>
4086
inline constexpr bool value_in_range_of(T val)
4087
1.17k
{
4088
1.17k
    return value_in_range_of_impl1<OfType, T>::test(val);
4089
1.17k
}
bool nlohmann::json_abi_v3_11_2::detail::value_in_range_of<unsigned long, long>(long)
Line
Count
Source
4087
327
{
4088
327
    return value_in_range_of_impl1<OfType, T>::test(val);
4089
327
}
bool nlohmann::json_abi_v3_11_2::detail::value_in_range_of<unsigned long, unsigned long>(unsigned long)
Line
Count
Source
4087
850
{
4088
850
    return value_in_range_of_impl1<OfType, T>::test(val);
4089
850
}
4090
4091
template<bool Value>
4092
using bool_constant = std::integral_constant<bool, Value>;
4093
4094
///////////////////////////////////////////////////////////////////////////////
4095
// is_c_string
4096
///////////////////////////////////////////////////////////////////////////////
4097
4098
namespace impl
4099
{
4100
4101
template<typename T>
4102
inline constexpr bool is_c_string()
4103
{
4104
    using TUnExt = typename std::remove_extent<T>::type;
4105
    using TUnCVExt = typename std::remove_cv<TUnExt>::type;
4106
    using TUnPtr = typename std::remove_pointer<T>::type;
4107
    using TUnCVPtr = typename std::remove_cv<TUnPtr>::type;
4108
    return
4109
        (std::is_array<T>::value && std::is_same<TUnCVExt, char>::value)
4110
        || (std::is_pointer<T>::value && std::is_same<TUnCVPtr, char>::value);
4111
}
4112
4113
}  // namespace impl
4114
4115
// checks whether T is a [cv] char */[cv] char[] C string
4116
template<typename T>
4117
struct is_c_string : bool_constant<impl::is_c_string<T>()> {};
4118
4119
template<typename T>
4120
using is_c_string_uncvref = is_c_string<uncvref_t<T>>;
4121
4122
///////////////////////////////////////////////////////////////////////////////
4123
// is_transparent
4124
///////////////////////////////////////////////////////////////////////////////
4125
4126
namespace impl
4127
{
4128
4129
template<typename T>
4130
inline constexpr bool is_transparent()
4131
0
{
4132
0
    return is_detected<detect_is_transparent, T>::value;
4133
0
}
4134
4135
}  // namespace impl
4136
4137
// checks whether T has a member named is_transparent
4138
template<typename T>
4139
struct is_transparent : bool_constant<impl::is_transparent<T>()> {};
4140
4141
///////////////////////////////////////////////////////////////////////////////
4142
4143
}  // namespace detail
4144
NLOHMANN_JSON_NAMESPACE_END
4145
4146
// #include <nlohmann/detail/string_concat.hpp>
4147
//     __ _____ _____ _____
4148
//  __|  |   __|     |   | |  JSON for Modern C++
4149
// |  |  |__   |  |  | | | |  version 3.11.2
4150
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
4151
//
4152
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
4153
// SPDX-License-Identifier: MIT
4154
4155
4156
4157
#include <cstring> // strlen
4158
#include <string> // string
4159
#include <utility> // forward
4160
4161
// #include <nlohmann/detail/meta/cpp_future.hpp>
4162
4163
// #include <nlohmann/detail/meta/detected.hpp>
4164
4165
4166
NLOHMANN_JSON_NAMESPACE_BEGIN
4167
namespace detail
4168
{
4169
4170
inline std::size_t concat_length()
4171
67.6k
{
4172
67.6k
    return 0;
4173
67.6k
}
4174
4175
template<typename... Args>
4176
inline std::size_t concat_length(const char* cstr, const Args& ... rest);
4177
4178
template<typename StringType, typename... Args>
4179
inline std::size_t concat_length(const StringType& str, const Args& ... rest);
4180
4181
template<typename... Args>
4182
inline std::size_t concat_length(const char /*c*/, const Args& ... rest)
4183
31.8k
{
4184
31.8k
    return 1 + concat_length(rest...);
4185
31.8k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [3]>(char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3])
Line
Count
Source
4183
15.2k
{
4184
15.2k
    return 1 + concat_length(rest...);
4185
15.2k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4183
11.7k
{
4184
11.7k
    return 1 + concat_length(rest...);
4185
11.7k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<>(char)
Line
Count
Source
4183
4.84k
{
4184
4.84k
    return 1 + concat_length(rest...);
4185
4.84k
}
4186
4187
template<typename... Args>
4188
inline std::size_t concat_length(const char* cstr, const Args& ... rest)
4189
104k
{
4190
    // cppcheck-suppress ignoredReturnValue
4191
104k
    return ::strlen(cstr) + concat_length(rest...);
4192
104k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [3]>(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3])
Line
Count
Source
4189
15.2k
{
4190
    // cppcheck-suppress ignoredReturnValue
4191
15.2k
    return ::strlen(cstr) + concat_length(rest...);
4192
15.2k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<>(char const*)
Line
Count
Source
4189
17.5k
{
4190
    // cppcheck-suppress ignoredReturnValue
4191
17.5k
    return ::strlen(cstr) + concat_length(rest...);
4192
17.5k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4189
29.9k
{
4190
    // cppcheck-suppress ignoredReturnValue
4191
29.9k
    return ::strlen(cstr) + concat_length(rest...);
4192
29.9k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [41]>(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [41])
Line
Count
Source
4189
4
{
4190
    // cppcheck-suppress ignoredReturnValue
4191
4
    return ::strlen(cstr) + concat_length(rest...);
4192
4
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4189
14.8k
{
4190
    // cppcheck-suppress ignoredReturnValue
4191
14.8k
    return ::strlen(cstr) + concat_length(rest...);
4192
14.8k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4189
14.8k
{
4190
    // cppcheck-suppress ignoredReturnValue
4191
14.8k
    return ::strlen(cstr) + concat_length(rest...);
4192
14.8k
}
Unexecuted instantiation: unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<char const*>(char const*, char const* const&)
Line
Count
Source
4189
2.30k
{
4190
    // cppcheck-suppress ignoredReturnValue
4191
2.30k
    return ::strlen(cstr) + concat_length(rest...);
4192
2.30k
}
Unexecuted instantiation: unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [2]>(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [2])
Unexecuted instantiation: unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [56]>(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [56])
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char>(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const&)
Line
Count
Source
4189
4.84k
{
4190
    // cppcheck-suppress ignoredReturnValue
4191
4.84k
    return ::strlen(cstr) + concat_length(rest...);
4192
4.84k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4189
2.91k
{
4190
    // cppcheck-suppress ignoredReturnValue
4191
2.91k
    return ::strlen(cstr) + concat_length(rest...);
4192
2.91k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<char [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char>(char const*, char const (&) [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const&)
Line
Count
Source
4189
1.92k
{
4190
    // cppcheck-suppress ignoredReturnValue
4191
1.92k
    return ::strlen(cstr) + concat_length(rest...);
4192
1.92k
}
4193
4194
template<typename StringType, typename... Args>
4195
inline std::size_t concat_length(const StringType& str, const Args& ... rest)
4196
152k
{
4197
152k
    return str.size() + concat_length(rest...);
4198
152k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4196
463
{
4197
463
    return str.size() + concat_length(rest...);
4198
463
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4196
15.2k
{
4197
15.2k
    return str.size() + concat_length(rest...);
4198
15.2k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4196
45.2k
{
4197
45.2k
    return str.size() + concat_length(rest...);
4198
45.2k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [3]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3])
Line
Count
Source
4196
15.2k
{
4197
15.2k
    return str.size() + concat_length(rest...);
4198
15.2k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [3]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3])
Line
Count
Source
4196
15.2k
{
4197
15.2k
    return str.size() + concat_length(rest...);
4198
15.2k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [41]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [41])
Line
Count
Source
4196
4
{
4197
4
    return str.size() + concat_length(rest...);
4198
4
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [12], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [12], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4196
14.8k
{
4197
14.8k
    return str.size() + concat_length(rest...);
4198
14.8k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4196
14.8k
{
4197
14.8k
    return str.size() + concat_length(rest...);
4198
14.8k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4196
11.7k
{
4197
11.7k
    return str.size() + concat_length(rest...);
4198
11.7k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4196
11.7k
{
4197
11.7k
    return str.size() + concat_length(rest...);
4198
11.7k
}
Unexecuted instantiation: unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Unexecuted instantiation: unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [2]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [2])
Unexecuted instantiation: unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [56]>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [56])
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const&)
Line
Count
Source
4196
4.84k
{
4197
4.84k
    return str.size() + concat_length(rest...);
4198
4.84k
}
unsigned long nlohmann::json_abi_v3_11_2::detail::concat_length<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4196
2.91k
{
4197
2.91k
    return str.size() + concat_length(rest...);
4198
2.91k
}
4199
4200
template<typename OutStringType>
4201
inline void concat_into(OutStringType& /*out*/)
4202
67.6k
{}
4203
4204
template<typename StringType, typename Arg>
4205
using string_can_append = decltype(std::declval<StringType&>().append(std::declval < Arg && > ()));
4206
4207
template<typename StringType, typename Arg>
4208
using detect_string_can_append = is_detected<string_can_append, StringType, Arg>;
4209
4210
template<typename StringType, typename Arg>
4211
using string_can_append_op = decltype(std::declval<StringType&>() += std::declval < Arg && > ());
4212
4213
template<typename StringType, typename Arg>
4214
using detect_string_can_append_op = is_detected<string_can_append_op, StringType, Arg>;
4215
4216
template<typename StringType, typename Arg>
4217
using string_can_append_iter = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().begin(), std::declval<const Arg&>().end()));
4218
4219
template<typename StringType, typename Arg>
4220
using detect_string_can_append_iter = is_detected<string_can_append_iter, StringType, Arg>;
4221
4222
template<typename StringType, typename Arg>
4223
using string_can_append_data = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().data(), std::declval<const Arg&>().size()));
4224
4225
template<typename StringType, typename Arg>
4226
using detect_string_can_append_data = is_detected<string_can_append_data, StringType, Arg>;
4227
4228
template < typename OutStringType, typename Arg, typename... Args,
4229
           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
4230
                         && detect_string_can_append_op<OutStringType, Arg>::value, int > = 0 >
4231
inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest);
4232
4233
template < typename OutStringType, typename Arg, typename... Args,
4234
           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
4235
                         && !detect_string_can_append_op<OutStringType, Arg>::value
4236
                         && detect_string_can_append_iter<OutStringType, Arg>::value, int > = 0 >
4237
inline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest);
4238
4239
template < typename OutStringType, typename Arg, typename... Args,
4240
           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
4241
                         && !detect_string_can_append_op<OutStringType, Arg>::value
4242
                         && !detect_string_can_append_iter<OutStringType, Arg>::value
4243
                         && detect_string_can_append_data<OutStringType, Arg>::value, int > = 0 >
4244
inline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest);
4245
4246
template<typename OutStringType, typename Arg, typename... Args,
4247
         enable_if_t<detect_string_can_append<OutStringType, Arg>::value, int> = 0>
4248
inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest)
4249
256k
{
4250
256k
    out.append(std::forward<Arg>(arg));
4251
256k
    concat_into(out, std::forward<Args>(rest)...);
4252
256k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4249
463
{
4250
463
    out.append(std::forward<Arg>(arg));
4251
463
    concat_into(out, std::forward<Args>(rest)...);
4252
463
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4249
15.2k
{
4250
15.2k
    out.append(std::forward<Arg>(arg));
4251
15.2k
    concat_into(out, std::forward<Args>(rest)...);
4252
15.2k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, , 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4249
27.1k
{
4250
27.1k
    out.append(std::forward<Arg>(arg));
4251
27.1k
    concat_into(out, std::forward<Args>(rest)...);
4252
27.1k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [17], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [17], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [3])
Line
Count
Source
4249
15.2k
{
4250
15.2k
    out.append(std::forward<Arg>(arg));
4251
15.2k
    concat_into(out, std::forward<Args>(rest)...);
4252
15.2k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [3])
Line
Count
Source
4249
15.2k
{
4250
15.2k
    out.append(std::forward<Arg>(arg));
4251
15.2k
    concat_into(out, std::forward<Args>(rest)...);
4252
15.2k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [3])
Line
Count
Source
4249
15.2k
{
4250
15.2k
    out.append(std::forward<Arg>(arg));
4251
15.2k
    concat_into(out, std::forward<Args>(rest)...);
4252
15.2k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3], , 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [3])
Line
Count
Source
4249
15.2k
{
4250
15.2k
    out.append(std::forward<Arg>(arg));
4251
15.2k
    concat_into(out, std::forward<Args>(rest)...);
4252
15.2k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [24], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [24], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4249
103
{
4250
103
    out.append(std::forward<Arg>(arg));
4251
103
    concat_into(out, std::forward<Args>(rest)...);
4252
103
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, , 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4249
17.9k
{
4250
17.9k
    out.append(std::forward<Arg>(arg));
4251
17.9k
    concat_into(out, std::forward<Args>(rest)...);
4252
17.9k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [38], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [38], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4249
38
{
4250
38
    out.append(std::forward<Arg>(arg));
4251
38
    concat_into(out, std::forward<Args>(rest)...);
4252
38
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [23], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [23], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4249
100
{
4250
100
    out.append(std::forward<Arg>(arg));
4251
100
    concat_into(out, std::forward<Args>(rest)...);
4252
100
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [42], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [42], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4249
39
{
4250
39
    out.append(std::forward<Arg>(arg));
4251
39
    concat_into(out, std::forward<Args>(rest)...);
4252
39
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [32], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [32], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4249
130
{
4250
130
    out.append(std::forward<Arg>(arg));
4251
130
    concat_into(out, std::forward<Args>(rest)...);
4252
130
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [96], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [96], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4249
10
{
4250
10
    out.append(std::forward<Arg>(arg));
4251
10
    concat_into(out, std::forward<Args>(rest)...);
4252
10
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, , 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4249
73
{
4250
73
    out.append(std::forward<Arg>(arg));
4251
73
    concat_into(out, std::forward<Args>(rest)...);
4252
73
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [90], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [90], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4249
23
{
4250
23
    out.append(std::forward<Arg>(arg));
4251
23
    concat_into(out, std::forward<Args>(rest)...);
4252
23
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [17], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [17], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4249
27
{
4250
27
    out.append(std::forward<Arg>(arg));
4251
27
    concat_into(out, std::forward<Args>(rest)...);
4252
27
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [68], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [68], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4249
2
{
4250
2
    out.append(std::forward<Arg>(arg));
4251
2
    concat_into(out, std::forward<Args>(rest)...);
4252
2
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [41], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [41])
Line
Count
Source
4249
4
{
4250
4
    out.append(std::forward<Arg>(arg));
4251
4
    concat_into(out, std::forward<Args>(rest)...);
4252
4
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [41], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [41])
Line
Count
Source
4249
4
{
4250
4
    out.append(std::forward<Arg>(arg));
4251
4
    concat_into(out, std::forward<Args>(rest)...);
4252
4
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [41], , 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [41])
Line
Count
Source
4249
4
{
4250
4
    out.append(std::forward<Arg>(arg));
4251
4
    concat_into(out, std::forward<Args>(rest)...);
4252
4
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [51], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [51], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4249
10
{
4250
10
    out.append(std::forward<Arg>(arg));
4251
10
    concat_into(out, std::forward<Args>(rest)...);
4252
10
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [22], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [22], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4249
2.65k
{
4250
2.65k
    out.append(std::forward<Arg>(arg));
4251
2.65k
    concat_into(out, std::forward<Args>(rest)...);
4252
2.65k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [58], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [58], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4249
1
{
4250
1
    out.append(std::forward<Arg>(arg));
4251
1
    concat_into(out, std::forward<Args>(rest)...);
4252
1
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [12], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [12], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4249
14.8k
{
4250
14.8k
    out.append(std::forward<Arg>(arg));
4251
14.8k
    concat_into(out, std::forward<Args>(rest)...);
4252
14.8k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [12], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [12], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4249
14.8k
{
4250
14.8k
    out.append(std::forward<Arg>(arg));
4251
14.8k
    concat_into(out, std::forward<Args>(rest)...);
4252
14.8k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4249
14.8k
{
4250
14.8k
    out.append(std::forward<Arg>(arg));
4251
14.8k
    concat_into(out, std::forward<Args>(rest)...);
4252
14.8k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4249
14.8k
{
4250
14.8k
    out.append(std::forward<Arg>(arg));
4251
14.8k
    concat_into(out, std::forward<Args>(rest)...);
4252
14.8k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4249
14.8k
{
4250
14.8k
    out.append(std::forward<Arg>(arg));
4251
14.8k
    concat_into(out, std::forward<Args>(rest)...);
4252
14.8k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4249
11.7k
{
4250
11.7k
    out.append(std::forward<Arg>(arg));
4251
11.7k
    concat_into(out, std::forward<Args>(rest)...);
4252
11.7k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4249
11.7k
{
4250
11.7k
    out.append(std::forward<Arg>(arg));
4251
11.7k
    concat_into(out, std::forward<Args>(rest)...);
4252
11.7k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4249
11.7k
{
4250
11.7k
    out.append(std::forward<Arg>(arg));
4251
11.7k
    concat_into(out, std::forward<Args>(rest)...);
4252
11.7k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [37], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [37], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4249
209
{
4250
209
    out.append(std::forward<Arg>(arg));
4251
209
    concat_into(out, std::forward<Args>(rest)...);
4252
209
}
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [29], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [29], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [39], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [39], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [29], char const*, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [29], char const*&&)
Line
Count
Source
4249
246
{
4250
246
    out.append(std::forward<Arg>(arg));
4251
246
    concat_into(out, std::forward<Args>(rest)...);
4252
246
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const*, , 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const*&&)
Line
Count
Source
4249
2.30k
{
4250
2.30k
    out.append(std::forward<Arg>(arg));
4251
2.30k
    concat_into(out, std::forward<Args>(rest)...);
4252
2.30k
}
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [25], char const*, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [25], char const*&&)
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [54], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [2], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [54], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [2])
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [2], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [2])
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [2], , 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [2])
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [52], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [2], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [52], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [2])
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [2], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [2])
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [16], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [56], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [16], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [56])
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [56], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [56])
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [56], , 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [56])
Unexecuted instantiation: void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [61], char const*, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [61], char const*&&)
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [26], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [26], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char&&)
Line
Count
Source
4249
8
{
4250
8
    out.append(std::forward<Arg>(arg));
4251
8
    concat_into(out, std::forward<Args>(rest)...);
4252
8
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char&&)
Line
Count
Source
4249
1.93k
{
4250
1.93k
    out.append(std::forward<Arg>(arg));
4251
1.93k
    concat_into(out, std::forward<Args>(rest)...);
4252
1.93k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4249
2.91k
{
4250
2.91k
    out.append(std::forward<Arg>(arg));
4251
2.91k
    concat_into(out, std::forward<Args>(rest)...);
4252
2.91k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4249
2.91k
{
4250
2.91k
    out.append(std::forward<Arg>(arg));
4251
2.91k
    concat_into(out, std::forward<Args>(rest)...);
4252
2.91k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char&&)
Line
Count
Source
4249
2.91k
{
4250
2.91k
    out.append(std::forward<Arg>(arg));
4251
2.91k
    concat_into(out, std::forward<Args>(rest)...);
4252
2.91k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char&&)
Line
Count
Source
4249
2.91k
{
4250
2.91k
    out.append(std::forward<Arg>(arg));
4251
2.91k
    concat_into(out, std::forward<Args>(rest)...);
4252
2.91k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const*, char const (&) [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const*&&, char const (&) [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char&&)
Line
Count
Source
4249
1.92k
{
4250
1.92k
    out.append(std::forward<Arg>(arg));
4251
1.92k
    concat_into(out, std::forward<Args>(rest)...);
4252
1.92k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char&&)
Line
Count
Source
4249
1.92k
{
4250
1.92k
    out.append(std::forward<Arg>(arg));
4251
1.92k
    concat_into(out, std::forward<Args>(rest)...);
4252
1.92k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [12], char const*, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [12], char const*&&)
Line
Count
Source
4249
2.05k
{
4250
2.05k
    out.append(std::forward<Arg>(arg));
4251
2.05k
    concat_into(out, std::forward<Args>(rest)...);
4252
2.05k
}
4253
4254
template < typename OutStringType, typename Arg, typename... Args,
4255
           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
4256
                         && detect_string_can_append_op<OutStringType, Arg>::value, int > >
4257
inline void concat_into(OutStringType& out, Arg&& arg, Args&& ... rest)
4258
31.8k
{
4259
31.8k
    out += std::forward<Arg>(arg);
4260
31.8k
    concat_into(out, std::forward<Args>(rest)...);
4261
31.8k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3], 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [3])
Line
Count
Source
4258
15.2k
{
4259
15.2k
    out += std::forward<Arg>(arg);
4260
15.2k
    concat_into(out, std::forward<Args>(rest)...);
4261
15.2k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4258
11.7k
{
4259
11.7k
    out += std::forward<Arg>(arg);
4260
11.7k
    concat_into(out, std::forward<Args>(rest)...);
4261
11.7k
}
void nlohmann::json_abi_v3_11_2::detail::concat_into<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char, , 0>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char&&)
Line
Count
Source
4258
4.84k
{
4259
4.84k
    out += std::forward<Arg>(arg);
4260
4.84k
    concat_into(out, std::forward<Args>(rest)...);
4261
4.84k
}
4262
4263
template < typename OutStringType, typename Arg, typename... Args,
4264
           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
4265
                         && !detect_string_can_append_op<OutStringType, Arg>::value
4266
                         && detect_string_can_append_iter<OutStringType, Arg>::value, int > >
4267
inline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest)
4268
{
4269
    out.append(arg.begin(), arg.end());
4270
    concat_into(out, std::forward<Args>(rest)...);
4271
}
4272
4273
template < typename OutStringType, typename Arg, typename... Args,
4274
           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
4275
                         && !detect_string_can_append_op<OutStringType, Arg>::value
4276
                         && !detect_string_can_append_iter<OutStringType, Arg>::value
4277
                         && detect_string_can_append_data<OutStringType, Arg>::value, int > >
4278
inline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest)
4279
{
4280
    out.append(arg.data(), arg.size());
4281
    concat_into(out, std::forward<Args>(rest)...);
4282
}
4283
4284
template<typename OutStringType = std::string, typename... Args>
4285
inline OutStringType concat(Args && ... args)
4286
67.6k
{
4287
67.6k
    OutStringType str;
4288
67.6k
    str.reserve(concat_length(args...));
4289
67.6k
    concat_into(str, std::forward<Args>(args)...);
4290
67.6k
    return str;
4291
67.6k
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4286
463
{
4287
463
    OutStringType str;
4288
463
    str.reserve(concat_length(args...));
4289
463
    concat_into(str, std::forward<Args>(args)...);
4290
463
    return str;
4291
463
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [17], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3]>(char const (&) [17], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [3])
Line
Count
Source
4286
15.2k
{
4287
15.2k
    OutStringType str;
4288
15.2k
    str.reserve(concat_length(args...));
4289
15.2k
    concat_into(str, std::forward<Args>(args)...);
4290
15.2k
    return str;
4291
15.2k
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [24], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const (&) [24], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4286
103
{
4287
103
    OutStringType str;
4288
103
    str.reserve(concat_length(args...));
4289
103
    concat_into(str, std::forward<Args>(args)...);
4290
103
    return str;
4291
103
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [38], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const (&) [38], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4286
38
{
4287
38
    OutStringType str;
4288
38
    str.reserve(concat_length(args...));
4289
38
    concat_into(str, std::forward<Args>(args)...);
4290
38
    return str;
4291
38
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [23], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const (&) [23], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4286
100
{
4287
100
    OutStringType str;
4288
100
    str.reserve(concat_length(args...));
4289
100
    concat_into(str, std::forward<Args>(args)...);
4290
100
    return str;
4291
100
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [42], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const (&) [42], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4286
39
{
4287
39
    OutStringType str;
4288
39
    str.reserve(concat_length(args...));
4289
39
    concat_into(str, std::forward<Args>(args)...);
4290
39
    return str;
4291
39
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [32], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(char const (&) [32], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4286
130
{
4287
130
    OutStringType str;
4288
130
    str.reserve(concat_length(args...));
4289
130
    concat_into(str, std::forward<Args>(args)...);
4290
130
    return str;
4291
130
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [96], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&>(char const (&) [96], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4286
10
{
4287
10
    OutStringType str;
4288
10
    str.reserve(concat_length(args...));
4289
10
    concat_into(str, std::forward<Args>(args)...);
4290
10
    return str;
4291
10
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [90], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&>(char const (&) [90], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4286
23
{
4287
23
    OutStringType str;
4288
23
    str.reserve(concat_length(args...));
4289
23
    concat_into(str, std::forward<Args>(args)...);
4290
23
    return str;
4291
23
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [17], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&>(char const (&) [17], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4286
27
{
4287
27
    OutStringType str;
4288
27
    str.reserve(concat_length(args...));
4289
27
    concat_into(str, std::forward<Args>(args)...);
4290
27
    return str;
4291
27
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [68], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&>(char const (&) [68], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4286
2
{
4287
2
    OutStringType str;
4288
2
    str.reserve(concat_length(args...));
4289
2
    concat_into(str, std::forward<Args>(args)...);
4290
2
    return str;
4291
2
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [41]>(char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const (&) [41])
Line
Count
Source
4286
4
{
4287
4
    OutStringType str;
4288
4
    str.reserve(concat_length(args...));
4289
4
    concat_into(str, std::forward<Args>(args)...);
4290
4
    return str;
4291
4
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [51], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&>(char const (&) [51], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4286
10
{
4287
10
    OutStringType str;
4288
10
    str.reserve(concat_length(args...));
4289
10
    concat_into(str, std::forward<Args>(args)...);
4290
10
    return str;
4291
10
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [22], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const (&) [22], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4286
2.65k
{
4287
2.65k
    OutStringType str;
4288
2.65k
    str.reserve(concat_length(args...));
4289
2.65k
    concat_into(str, std::forward<Args>(args)...);
4290
2.65k
    return str;
4291
2.65k
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [58], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&>(char const (&) [58], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)
Line
Count
Source
4286
1
{
4287
1
    OutStringType str;
4288
1
    str.reserve(concat_length(args...));
4289
1
    concat_into(str, std::forward<Args>(args)...);
4290
1
    return str;
4291
1
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [12], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [12], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4286
14.8k
{
4287
14.8k
    OutStringType str;
4288
14.8k
    str.reserve(concat_length(args...));
4289
14.8k
    concat_into(str, std::forward<Args>(args)...);
4290
14.8k
    return str;
4291
14.8k
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4286
11.8k
{
4287
11.8k
    OutStringType str;
4288
11.8k
    str.reserve(concat_length(args...));
4289
11.8k
    concat_into(str, std::forward<Args>(args)...);
4290
11.8k
    return str;
4291
11.8k
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [3], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
4286
11.7k
{
4287
11.7k
    OutStringType str;
4288
11.7k
    str.reserve(concat_length(args...));
4289
11.7k
    concat_into(str, std::forward<Args>(args)...);
4290
11.7k
    return str;
4291
11.7k
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [37], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const (&) [37], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4286
209
{
4287
209
    OutStringType str;
4288
209
    str.reserve(concat_length(args...));
4289
209
    concat_into(str, std::forward<Args>(args)...);
4290
209
    return str;
4291
209
}
Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [29], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const (&) [29], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [5], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [39], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const (&) [39], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [29], char const*>(char const (&) [29], char const*&&)
Line
Count
Source
4286
246
{
4287
246
    OutStringType str;
4288
246
    str.reserve(concat_length(args...));
4289
246
    concat_into(str, std::forward<Args>(args)...);
4290
246
    return str;
4291
246
}
Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [25], char const*>(char const (&) [25], char const*&&)
Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [54], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [2]>(char const (&) [54], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const (&) [2])
Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [52], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [2]>(char const (&) [52], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [2])
Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [16], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [56]>(char const (&) [16], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [56])
Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [61], char const*>(char const (&) [61], char const*&&)
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [26], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char>(char const (&) [26], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char&&)
Line
Count
Source
4286
8
{
4287
8
    OutStringType str;
4288
8
    str.reserve(concat_length(args...));
4289
8
    concat_into(str, std::forward<Args>(args)...);
4290
8
    return str;
4291
8
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char const (&) [10], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)
Line
Count
Source
4286
2.91k
{
4287
2.91k
    OutStringType str;
4288
2.91k
    str.reserve(concat_length(args...));
4289
2.91k
    concat_into(str, std::forward<Args>(args)...);
4290
2.91k
    return str;
4291
2.91k
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char>(char const (&) [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char&&)
Line
Count
Source
4286
2.91k
{
4287
2.91k
    OutStringType str;
4288
2.91k
    str.reserve(concat_length(args...));
4289
2.91k
    concat_into(str, std::forward<Args>(args)...);
4290
2.91k
    return str;
4291
2.91k
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const*, char const (&) [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char>(char const*&&, char const (&) [15], std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, char&&)
Line
Count
Source
4286
1.92k
{
4287
1.92k
    OutStringType str;
4288
1.92k
    str.reserve(concat_length(args...));
4289
1.92k
    concat_into(str, std::forward<Args>(args)...);
4290
1.92k
    return str;
4291
1.92k
}
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > nlohmann::json_abi_v3_11_2::detail::concat<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const (&) [12], char const*>(char const (&) [12], char const*&&)
Line
Count
Source
4286
2.05k
{
4287
2.05k
    OutStringType str;
4288
2.05k
    str.reserve(concat_length(args...));
4289
2.05k
    concat_into(str, std::forward<Args>(args)...);
4290
2.05k
    return str;
4291
2.05k
}
4292
4293
}  // namespace detail
4294
NLOHMANN_JSON_NAMESPACE_END
4295
4296
4297
NLOHMANN_JSON_NAMESPACE_BEGIN
4298
namespace detail
4299
{
4300
4301
////////////////
4302
// exceptions //
4303
////////////////
4304
4305
/// @brief general exception of the @ref basic_json class
4306
/// @sa https://json.nlohmann.me/api/basic_json/exception/
4307
class exception : public std::exception
4308
{
4309
  public:
4310
    /// returns the explanatory string
4311
    const char* what() const noexcept override
4312
0
    {
4313
0
        return m.what();
4314
0
    }
4315
4316
    /// the id of the exception
4317
    const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
4318
4319
  protected:
4320
    JSON_HEDLEY_NON_NULL(3)
4321
15.2k
    exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing)
4322
4323
    static std::string name(const std::string& ename, int id_)
4324
15.2k
    {
4325
15.2k
        return concat("[json.exception.", ename, '.', std::to_string(id_), "] ");
4326
15.2k
    }
4327
4328
    static std::string diagnostics(std::nullptr_t /*leaf_element*/)
4329
14.8k
    {
4330
14.8k
        return "";
4331
14.8k
    }
4332
4333
    template<typename BasicJsonType>
4334
    static std::string diagnostics(const BasicJsonType* leaf_element)
4335
449
    {
4336
#if JSON_DIAGNOSTICS
4337
        std::vector<std::string> tokens;
4338
        for (const auto* current = leaf_element; current != nullptr && current->m_parent != nullptr; current = current->m_parent)
4339
        {
4340
            switch (current->m_parent->type())
4341
            {
4342
                case value_t::array:
4343
                {
4344
                    for (std::size_t i = 0; i < current->m_parent->m_data.m_value.array->size(); ++i)
4345
                    {
4346
                        if (&current->m_parent->m_data.m_value.array->operator[](i) == current)
4347
                        {
4348
                            tokens.emplace_back(std::to_string(i));
4349
                            break;
4350
                        }
4351
                    }
4352
                    break;
4353
                }
4354
4355
                case value_t::object:
4356
                {
4357
                    for (const auto& element : *current->m_parent->m_data.m_value.object)
4358
                    {
4359
                        if (&element.second == current)
4360
                        {
4361
                            tokens.emplace_back(element.first.c_str());
4362
                            break;
4363
                        }
4364
                    }
4365
                    break;
4366
                }
4367
4368
                case value_t::null: // LCOV_EXCL_LINE
4369
                case value_t::string: // LCOV_EXCL_LINE
4370
                case value_t::boolean: // LCOV_EXCL_LINE
4371
                case value_t::number_integer: // LCOV_EXCL_LINE
4372
                case value_t::number_unsigned: // LCOV_EXCL_LINE
4373
                case value_t::number_float: // LCOV_EXCL_LINE
4374
                case value_t::binary: // LCOV_EXCL_LINE
4375
                case value_t::discarded: // LCOV_EXCL_LINE
4376
                default:   // LCOV_EXCL_LINE
4377
                    break; // LCOV_EXCL_LINE
4378
            }
4379
        }
4380
4381
        if (tokens.empty())
4382
        {
4383
            return "";
4384
        }
4385
4386
        auto str = std::accumulate(tokens.rbegin(), tokens.rend(), std::string{},
4387
                                   [](const std::string & a, const std::string & b)
4388
        {
4389
            return concat(a, '/', detail::escape(b));
4390
        });
4391
        return concat('(', str, ") ");