12#error toml++ is a C++ library.
17#if _MSVC_LANG > __cplusplus
18#define TOML_CPP _MSVC_LANG
22#define TOML_CPP __cplusplus
24#if TOML_CPP >= 202900L
27#elif TOML_CPP >= 202600L
30#elif TOML_CPP >= 202302L
33#elif TOML_CPP >= 202002L
36#elif TOML_CPP >= 201703L
39#elif TOML_CPP >= 201402L
42#elif TOML_CPP >= 201103L
52#error toml++ requires C++17 or higher. For a pre-C++11 TOML library see https:
54#error toml++ requires C++17 or higher. For a C++11 TOML library see https:
61#ifndef TOML_MAKE_VERSION
62#define TOML_MAKE_VERSION(major, minor, patch) (((major)*10000) + ((minor)*100) + ((patch)))
65#ifndef TOML_INTELLISENSE
66#ifdef __INTELLISENSE__
67#define TOML_INTELLISENSE 1
69#define TOML_INTELLISENSE 0
74#if defined(DOXYGEN) || defined(__DOXYGEN) || defined(__DOXYGEN__) || defined(__doxygen__) || defined(__POXY__) \
84#define TOML_CLANG __clang_major__
94#if TOML_CLANG && defined(__apple_build_version__)
96#define TOML_CLANG_VERSION TOML_MAKE_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__)
97#if TOML_CLANG_VERSION >= TOML_MAKE_VERSION(15, 0, 0)
99#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(14, 3, 0)
101#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(14, 0, 0)
103#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(13, 1, 6)
105#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(13, 0, 0)
107#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(12, 0, 5)
109#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(12, 0, 0)
111#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(11, 0, 3)
113#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(11, 0, 0)
115#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(10, 0, 1)
120#undef TOML_CLANG_VERSION
125#ifdef __INTEL_COMPILER
126#define TOML_ICC __INTEL_COMPILER
128#define TOML_ICC_CL TOML_ICC
138#ifndef TOML_MSVC_LIKE
140#define TOML_MSVC_LIKE _MSC_VER
142#define TOML_MSVC_LIKE 0
147#if TOML_MSVC_LIKE && !TOML_CLANG && !TOML_ICC
148#define TOML_MSVC TOML_MSVC_LIKE
156#define TOML_GCC_LIKE __GNUC__
158#define TOML_GCC_LIKE 0
163#if TOML_GCC_LIKE && !TOML_CLANG && !TOML_ICC
164#define TOML_GCC TOML_GCC_LIKE
171#if defined(__CUDACC__) || defined(__CUDA_ARCH__) || defined(__CUDA_LIBDEVICE__)
182#ifndef TOML_ARCH_ITANIUM
183#if defined(__ia64__) || defined(__ia64) || defined(_IA64) || defined(__IA64__) || defined(_M_IA64)
184#define TOML_ARCH_ITANIUM 1
185#define TOML_ARCH_BITNESS 64
187#define TOML_ARCH_ITANIUM 0
191#ifndef TOML_ARCH_AMD64
192#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_AMD64)
193#define TOML_ARCH_AMD64 1
194#define TOML_ARCH_BITNESS 64
196#define TOML_ARCH_AMD64 0
201#if defined(__i386__) || defined(_M_IX86)
202#define TOML_ARCH_X86 1
203#define TOML_ARCH_BITNESS 32
205#define TOML_ARCH_X86 0
210#if defined(__aarch64__) || defined(__ARM_ARCH_ISA_A64) || defined(_M_ARM64) || defined(__ARM_64BIT_STATE) \
211 || defined(_M_ARM64EC)
212#define TOML_ARCH_ARM32 0
213#define TOML_ARCH_ARM64 1
214#define TOML_ARCH_ARM 1
215#define TOML_ARCH_BITNESS 64
216#elif defined(__arm__) || defined(_M_ARM) || defined(__ARM_32BIT_STATE)
217#define TOML_ARCH_ARM32 1
218#define TOML_ARCH_ARM64 0
219#define TOML_ARCH_ARM 1
220#define TOML_ARCH_BITNESS 32
222#define TOML_ARCH_ARM32 0
223#define TOML_ARCH_ARM64 0
224#define TOML_ARCH_ARM 0
228#ifndef TOML_ARCH_BITNESS
229#define TOML_ARCH_BITNESS 0
233#if TOML_ARCH_BITNESS == 64
234#define TOML_ARCH_X64 1
236#define TOML_ARCH_X64 0
244#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || defined(__CYGWIN__)
245#define TOML_WINDOWS 1
247#define TOML_WINDOWS 0
267#ifndef TOML_HAS_INCLUDE
269#define TOML_HAS_INCLUDE(header) __has_include(header)
271#define TOML_HAS_INCLUDE(header) 0
276#ifndef TOML_HAS_BUILTIN
278#define TOML_HAS_BUILTIN(name) __has_builtin(name)
280#define TOML_HAS_BUILTIN(name) 0
285#ifndef TOML_HAS_FEATURE
287#define TOML_HAS_FEATURE(name) __has_feature(name)
289#define TOML_HAS_FEATURE(name) 0
295#ifdef __has_attribute
296#define TOML_HAS_ATTR(attr) __has_attribute(attr)
298#define TOML_HAS_ATTR(attr) 0
303#ifndef TOML_HAS_CPP_ATTR
304#ifdef __has_cpp_attribute
305#define TOML_HAS_CPP_ATTR(attr) __has_cpp_attribute(attr)
307#define TOML_HAS_CPP_ATTR(attr) 0
313#if TOML_CLANG || TOML_GCC_LIKE
314#define TOML_ATTR(...) __attribute__((__VA_ARGS__))
316#define TOML_ATTR(...)
323#define TOML_DECLSPEC(...) __declspec(__VA_ARGS__)
325#define TOML_DECLSPEC(...)
330#ifndef TOML_COMPILER_HAS_EXCEPTIONS
331#if defined(__EXCEPTIONS) || defined(_CPPUNWIND) || defined(__cpp_exceptions)
332#define TOML_COMPILER_HAS_EXCEPTIONS 1
334#define TOML_COMPILER_HAS_EXCEPTIONS 0
339#ifndef TOML_COMPILER_HAS_RTTI
340#if defined(_CPPRTTI) || defined(__GXX_RTTI) || TOML_HAS_FEATURE(cxx_rtti)
341#define TOML_COMPILER_HAS_RTTI 1
343#define TOML_COMPILER_HAS_RTTI 0
348#define TOML_CONCAT_1(x, y) x##y
349#define TOML_CONCAT(x, y) TOML_CONCAT_1(x, y)
352#define TOML_MAKE_STRING_1(s) #s
353#define TOML_MAKE_STRING(s) TOML_MAKE_STRING_1(s)
357#define TOML_PRAGMA_CLANG(decl) _Pragma(TOML_MAKE_STRING(clang decl))
359#define TOML_PRAGMA_CLANG(decl)
362#define TOML_PRAGMA_CLANG_GE_8(decl) TOML_PRAGMA_CLANG(decl)
364#define TOML_PRAGMA_CLANG_GE_8(decl)
367#define TOML_PRAGMA_CLANG_GE_9(decl) TOML_PRAGMA_CLANG(decl)
369#define TOML_PRAGMA_CLANG_GE_9(decl)
372#define TOML_PRAGMA_CLANG_GE_10(decl) TOML_PRAGMA_CLANG(decl)
374#define TOML_PRAGMA_CLANG_GE_10(decl)
377#define TOML_PRAGMA_CLANG_GE_11(decl) TOML_PRAGMA_CLANG(decl)
379#define TOML_PRAGMA_CLANG_GE_11(decl)
382#define TOML_PRAGMA_GCC(decl) _Pragma(TOML_MAKE_STRING(GCC decl))
384#define TOML_PRAGMA_GCC(decl)
387#define TOML_PRAGMA_MSVC(...) __pragma(__VA_ARGS__)
389#define TOML_PRAGMA_MSVC(...)
392#define TOML_PRAGMA_ICC(...) __pragma(__VA_ARGS__)
394#define TOML_PRAGMA_ICC(...)
399#define TOML_ALWAYS_INLINE __forceinline
400#elif TOML_GCC || TOML_CLANG || TOML_HAS_ATTR(__always_inline__)
401#define TOML_ALWAYS_INLINE \
402 TOML_ATTR(__always_inline__) \
405#define TOML_ALWAYS_INLINE inline
410#define TOML_NEVER_INLINE TOML_DECLSPEC(noinline)
412#define TOML_NEVER_INLINE TOML_ATTR(noinline)
414#if TOML_GCC || TOML_CLANG || TOML_HAS_ATTR(__noinline__)
415#define TOML_NEVER_INLINE TOML_ATTR(__noinline__)
418#ifndef TOML_NEVER_INLINE
419#define TOML_NEVER_INLINE
423#define TOML_ABSTRACT_INTERFACE TOML_DECLSPEC(novtable)
424#define TOML_EMPTY_BASES TOML_DECLSPEC(empty_bases)
427#if TOML_CLANG || TOML_HAS_ATTR(__trivial_abi__)
428#define TOML_TRIVIAL_ABI TOML_ATTR(__trivial_abi__)
430#define TOML_TRIVIAL_ABI
434#if TOML_CPP >= 17 && TOML_HAS_CPP_ATTR(nodiscard) >= 201603
435#define TOML_NODISCARD [[nodiscard]]
436#elif TOML_CLANG || TOML_GCC || TOML_HAS_ATTR(__warn_unused_result__)
437#define TOML_NODISCARD TOML_ATTR(__warn_unused_result__)
439#define TOML_NODISCARD
443#if TOML_CPP >= 17 && TOML_HAS_CPP_ATTR(nodiscard) >= 201907
444#define TOML_NODISCARD_CTOR [[nodiscard]]
446#define TOML_NODISCARD_CTOR
453 TOML_DECLSPEC(noalias) \
462 TOML_DECLSPEC(noalias) \
468#ifndef TOML_INLINE_GETTER
469#define TOML_INLINE_GETTER \
473#ifndef TOML_PURE_GETTER
474#define TOML_PURE_GETTER \
478#ifndef TOML_PURE_INLINE_GETTER
479#define TOML_PURE_INLINE_GETTER \
484#ifndef TOML_CONST_GETTER
485#define TOML_CONST_GETTER \
489#ifndef TOML_CONST_INLINE_GETTER
490#define TOML_CONST_INLINE_GETTER \
498#define TOML_ASSUME(expr) __assume(expr)
499#elif TOML_ICC || TOML_CLANG || TOML_HAS_BUILTIN(__builtin_assume)
500#define TOML_ASSUME(expr) __builtin_assume(expr)
501#elif TOML_HAS_CPP_ATTR(assume) >= 202207
502#define TOML_ASSUME(expr) [[assume(expr)]]
503#elif TOML_HAS_ATTR(__assume__)
504#define TOML_ASSUME(expr) __attribute__((__assume__(expr)))
506#define TOML_ASSUME(expr) static_cast<void>(0)
511#define TOML_UNREACHABLE __assume(0)
512#elif TOML_ICC || TOML_CLANG || TOML_GCC || TOML_HAS_BUILTIN(__builtin_unreachable)
513#define TOML_UNREACHABLE __builtin_unreachable()
515#define TOML_UNREACHABLE static_cast<void>(0)
519#if TOML_CPP >= 20 && TOML_HAS_CPP_ATTR(likely) >= 201803
520#define TOML_LIKELY(...) (__VA_ARGS__) [[likely]]
521#define TOML_LIKELY_CASE [[likely]]
522#elif TOML_GCC || TOML_CLANG || TOML_HAS_BUILTIN(__builtin_expect)
523#define TOML_LIKELY(...) (__builtin_expect(!!(__VA_ARGS__), 1))
525#define TOML_LIKELY(...) (__VA_ARGS__)
527#ifndef TOML_LIKELY_CASE
528#define TOML_LIKELY_CASE
532#if TOML_CPP >= 20 && TOML_HAS_CPP_ATTR(unlikely) >= 201803
533#define TOML_UNLIKELY(...) (__VA_ARGS__) [[unlikely]]
534#define TOML_UNLIKELY_CASE [[unlikely]]
535#elif TOML_GCC || TOML_CLANG || TOML_HAS_BUILTIN(__builtin_expect)
536#define TOML_UNLIKELY(...) (__builtin_expect(!!(__VA_ARGS__), 0))
538#define TOML_UNLIKELY(...) (__VA_ARGS__)
540#ifndef TOML_UNLIKELY_CASE
541#define TOML_UNLIKELY_CASE
545#if TOML_CLANG || TOML_HAS_ATTR(flag_enum)
546#define TOML_FLAGS_ENUM __attribute__((flag_enum))
548#define TOML_FLAGS_ENUM
552#if TOML_CLANG || TOML_HAS_ATTR(enum_extensibility)
553#define TOML_OPEN_ENUM __attribute__((enum_extensibility(open)))
554#define TOML_CLOSED_ENUM __attribute__((enum_extensibility(closed)))
556#define TOML_OPEN_ENUM
557#define TOML_CLOSED_ENUM
561#define TOML_OPEN_FLAGS_ENUM TOML_OPEN_ENUM TOML_FLAGS_ENUM
562#define TOML_CLOSED_FLAGS_ENUM TOML_CLOSED_ENUM TOML_FLAGS_ENUM
565#define TOML_MAKE_FLAGS_2(T, op, linkage) \
566 TOML_CONST_INLINE_GETTER \
567 linkage constexpr T operator op(T lhs, T rhs) noexcept \
569 using under = std::underlying_type_t<T>; \
570 return static_cast<T>(static_cast<under>(lhs) op static_cast<under>(rhs)); \
573 linkage constexpr T& operator TOML_CONCAT(op, =)(T & lhs, T rhs) noexcept \
575 return lhs = (lhs op rhs); \
579#define TOML_MAKE_FLAGS_1(T, linkage) \
580 static_assert(std::is_enum_v<T>); \
582 TOML_MAKE_FLAGS_2(T, &, linkage); \
583 TOML_MAKE_FLAGS_2(T, |, linkage); \
584 TOML_MAKE_FLAGS_2(T, ^, linkage); \
586 TOML_CONST_INLINE_GETTER \
587 linkage constexpr T operator~(T val) noexcept \
589 using under = std::underlying_type_t<T>; \
590 return static_cast<T>(~static_cast<under>(val)); \
593 TOML_CONST_INLINE_GETTER \
594 linkage constexpr bool operator!(T val) noexcept \
596 using under = std::underlying_type_t<T>; \
597 return !static_cast<under>(val); \
601#define TOML_MAKE_FLAGS(T) TOML_MAKE_FLAGS_1(T, )
603#define TOML_UNUSED(...) static_cast<void>(__VA_ARGS__)
605#define TOML_DELETE_DEFAULTS(T) \
606 T(const T&) = delete; \
608 T& operator=(const T&) = delete; \
609 T& operator=(T&&) = delete
611#define TOML_ASYMMETRICAL_EQUALITY_OPS(LHS, RHS, ...) \
612 __VA_ARGS__ TOML_NODISCARD \
613 friend bool operator==(RHS rhs, LHS lhs) noexcept \
617 __VA_ARGS__ TOML_NODISCARD \
618 friend bool operator!=(LHS lhs, RHS rhs) noexcept \
620 return !(lhs == rhs); \
622 __VA_ARGS__ TOML_NODISCARD \
623 friend bool operator!=(RHS rhs, LHS lhs) noexcept \
625 return !(lhs == rhs); \
629#define TOML_EVAL_BOOL_1(T, F) T
630#define TOML_EVAL_BOOL_0(T, F) F
632#if !defined(__POXY__) && !defined(POXY_IMPLEMENTATION_DETAIL)
633#define POXY_IMPLEMENTATION_DETAIL(...) __VA_ARGS__
642#define TOML_PUSH_WARNINGS \
643 TOML_PRAGMA_CLANG(diagnostic push) \
644 TOML_PRAGMA_CLANG(diagnostic ignored "-Wunknown-warning-option") \
647#define TOML_DISABLE_SWITCH_WARNINGS \
648 TOML_PRAGMA_CLANG(diagnostic ignored "-Wswitch") \
651#define TOML_DISABLE_ARITHMETIC_WARNINGS \
652 TOML_PRAGMA_CLANG_GE_10(diagnostic ignored "-Wimplicit-int-float-conversion") \
653 TOML_PRAGMA_CLANG(diagnostic ignored "-Wfloat-equal") \
654 TOML_PRAGMA_CLANG(diagnostic ignored "-Wdouble-promotion") \
655 TOML_PRAGMA_CLANG(diagnostic ignored "-Wchar-subscripts") \
656 TOML_PRAGMA_CLANG(diagnostic ignored "-Wshift-sign-overflow") \
659#define TOML_DISABLE_SPAM_WARNINGS \
660 TOML_PRAGMA_CLANG_GE_8(diagnostic ignored "-Wdefaulted-function-deleted") \
661 TOML_PRAGMA_CLANG_GE_9(diagnostic ignored "-Wctad-maybe-unsupported") \
662 TOML_PRAGMA_CLANG_GE_10(diagnostic ignored "-Wzero-as-null-pointer-constant") \
663 TOML_PRAGMA_CLANG_GE_11(diagnostic ignored "-Wsuggest-destructor-override") \
664 TOML_PRAGMA_CLANG(diagnostic ignored "-Wweak-vtables") \
665 TOML_PRAGMA_CLANG(diagnostic ignored "-Wweak-template-vtables") \
666 TOML_PRAGMA_CLANG(diagnostic ignored "-Wdouble-promotion") \
667 TOML_PRAGMA_CLANG(diagnostic ignored "-Wchar-subscripts") \
668 TOML_PRAGMA_CLANG(diagnostic ignored "-Wmissing-field-initializers") \
669 TOML_PRAGMA_CLANG(diagnostic ignored "-Wpadded") \
672#define TOML_POP_WARNINGS \
673 TOML_PRAGMA_CLANG(diagnostic pop) \
676#define TOML_DISABLE_WARNINGS \
677 TOML_PRAGMA_CLANG(diagnostic push) \
678 TOML_PRAGMA_CLANG(diagnostic ignored "-Weverything") \
679 static_assert(true, "")
681#define TOML_ENABLE_WARNINGS \
682 TOML_PRAGMA_CLANG(diagnostic pop) \
685#define TOML_SIMPLE_STATIC_ASSERT_MESSAGES 1
689#define TOML_PUSH_WARNINGS \
690 __pragma(warning(push)) \
693#if TOML_HAS_INCLUDE(<CodeAnalysis/Warnings.h>)
694#pragma warning(push, 0)
695#include <CodeAnalysis/Warnings.h>
697#define TOML_DISABLE_CODE_ANALYSIS_WARNINGS \
698 __pragma(warning(disable : ALL_CODE_ANALYSIS_WARNINGS)) \
701#define TOML_DISABLE_CODE_ANALYSIS_WARNINGS static_assert(true)
704#define TOML_DISABLE_SWITCH_WARNINGS \
705 __pragma(warning(disable : 4061)) \
706 __pragma(warning(disable : 4062)) \
707 __pragma(warning(disable : 4063)) \
708 __pragma(warning(disable : 5262)) \
709 __pragma(warning(disable : 26819)) \
712#define TOML_DISABLE_SPAM_WARNINGS \
713 __pragma(warning(disable : 4127)) \
714 __pragma(warning(disable : 4324)) \
715 __pragma(warning(disable : 4348)) \
716 __pragma(warning(disable : 4464)) \
717 __pragma(warning(disable : 4505)) \
718 __pragma(warning(disable : 4514)) \
719 __pragma(warning(disable : 4582)) \
720 __pragma(warning(disable : 4619)) \
721 __pragma(warning(disable : 4623)) \
722 __pragma(warning(disable : 4625)) \
723 __pragma(warning(disable : 4626)) \
724 __pragma(warning(disable : 4710)) \
725 __pragma(warning(disable : 4711)) \
726 __pragma(warning(disable : 4820)) \
727 __pragma(warning(disable : 4946)) \
728 __pragma(warning(disable : 5026)) \
729 __pragma(warning(disable : 5027)) \
730 __pragma(warning(disable : 5039)) \
731 __pragma(warning(disable : 5045)) \
732 __pragma(warning(disable : 5264)) \
733 __pragma(warning(disable : 26451)) \
734 __pragma(warning(disable : 26490)) \
735 __pragma(warning(disable : 26495)) \
736 __pragma(warning(disable : 26812)) \
737 __pragma(warning(disable : 26819)) \
740#define TOML_DISABLE_ARITHMETIC_WARNINGS \
741 __pragma(warning(disable : 4365)) \
742 __pragma(warning(disable : 4738)) \
743 __pragma(warning(disable : 5219)) \
746#define TOML_POP_WARNINGS \
747 __pragma(warning(pop)) \
750#define TOML_DISABLE_WARNINGS \
751 __pragma(warning(push, 0)) \
752 __pragma(warning(disable : 4348)) \
753 __pragma(warning(disable : 4668)) \
754 __pragma(warning(disable : 5105)) \
755 __pragma(warning(disable : 5264)) \
756 TOML_DISABLE_CODE_ANALYSIS_WARNINGS; \
757 TOML_DISABLE_SWITCH_WARNINGS; \
758 TOML_DISABLE_SPAM_WARNINGS; \
759 TOML_DISABLE_ARITHMETIC_WARNINGS; \
762#define TOML_ENABLE_WARNINGS TOML_POP_WARNINGS
766#define TOML_PUSH_WARNINGS \
767 __pragma(warning(push)) \
770#define TOML_DISABLE_SPAM_WARNINGS \
771 __pragma(warning(disable : 82)) \
772 __pragma(warning(disable : 111)) \
773 __pragma(warning(disable : 869)) \
774 __pragma(warning(disable : 1011)) \
775 __pragma(warning(disable : 2261)) \
778#define TOML_POP_WARNINGS \
779 __pragma(warning(pop)) \
782#define TOML_DISABLE_WARNINGS \
783 __pragma(warning(push, 0)) \
784 TOML_DISABLE_SPAM_WARNINGS
786#define TOML_ENABLE_WARNINGS \
787 __pragma(warning(pop)) \
792#define TOML_PUSH_WARNINGS \
793 TOML_PRAGMA_GCC(diagnostic push) \
796#define TOML_DISABLE_SWITCH_WARNINGS \
797 TOML_PRAGMA_GCC(diagnostic ignored "-Wswitch") \
798 TOML_PRAGMA_GCC(diagnostic ignored "-Wswitch-enum") \
799 TOML_PRAGMA_GCC(diagnostic ignored "-Wswitch-default") \
802#define TOML_DISABLE_ARITHMETIC_WARNINGS \
803 TOML_PRAGMA_GCC(diagnostic ignored "-Wfloat-equal") \
804 TOML_PRAGMA_GCC(diagnostic ignored "-Wsign-conversion") \
805 TOML_PRAGMA_GCC(diagnostic ignored "-Wchar-subscripts") \
808#define TOML_DISABLE_SUGGEST_ATTR_WARNINGS \
809 TOML_PRAGMA_GCC(diagnostic ignored "-Wsuggest-attribute=const") \
810 TOML_PRAGMA_GCC(diagnostic ignored "-Wsuggest-attribute=pure") \
813#define TOML_DISABLE_SPAM_WARNINGS \
814 TOML_PRAGMA_GCC(diagnostic ignored "-Wpadded") \
815 TOML_PRAGMA_GCC(diagnostic ignored "-Wcast-align") \
816 TOML_PRAGMA_GCC(diagnostic ignored "-Wcomment") \
817 TOML_PRAGMA_GCC(diagnostic ignored "-Wtype-limits") \
818 TOML_PRAGMA_GCC(diagnostic ignored "-Wuseless-cast") \
819 TOML_PRAGMA_GCC(diagnostic ignored "-Wchar-subscripts") \
820 TOML_PRAGMA_GCC(diagnostic ignored "-Wsubobject-linkage") \
821 TOML_PRAGMA_GCC(diagnostic ignored "-Wmissing-field-initializers") \
822 TOML_PRAGMA_GCC(diagnostic ignored "-Wmaybe-uninitialized") \
823 TOML_PRAGMA_GCC(diagnostic ignored "-Wnoexcept") \
824 TOML_PRAGMA_GCC(diagnostic ignored "-Wnull-dereference") \
825 TOML_PRAGMA_GCC(diagnostic ignored "-Wduplicated-branches") \
828#define TOML_POP_WARNINGS \
829 TOML_PRAGMA_GCC(diagnostic pop) \
832#define TOML_DISABLE_WARNINGS \
833 TOML_PRAGMA_GCC(diagnostic push) \
834 TOML_PRAGMA_GCC(diagnostic ignored "-Wall") \
835 TOML_PRAGMA_GCC(diagnostic ignored "-Wextra") \
836 TOML_PRAGMA_GCC(diagnostic ignored "-Wpedantic") \
837 TOML_DISABLE_SWITCH_WARNINGS; \
838 TOML_DISABLE_ARITHMETIC_WARNINGS; \
839 TOML_DISABLE_SUGGEST_ATTR_WARNINGS; \
840 TOML_DISABLE_SPAM_WARNINGS; \
843#define TOML_ENABLE_WARNINGS \
844 TOML_PRAGMA_GCC(diagnostic pop) \
849#ifndef TOML_PUSH_WARNINGS
850#define TOML_PUSH_WARNINGS static_assert(true)
852#ifndef TOML_DISABLE_CODE_ANALYSIS_WARNINGS
853#define TOML_DISABLE_CODE_ANALYSIS_WARNINGS static_assert(true)
855#ifndef TOML_DISABLE_SWITCH_WARNINGS
856#define TOML_DISABLE_SWITCH_WARNINGS static_assert(true)
858#ifndef TOML_DISABLE_SUGGEST_ATTR_WARNINGS
859#define TOML_DISABLE_SUGGEST_ATTR_WARNINGS static_assert(true)
861#ifndef TOML_DISABLE_SPAM_WARNINGS
862#define TOML_DISABLE_SPAM_WARNINGS static_assert(true)
864#ifndef TOML_DISABLE_ARITHMETIC_WARNINGS
865#define TOML_DISABLE_ARITHMETIC_WARNINGS static_assert(true)
867#ifndef TOML_POP_WARNINGS
868#define TOML_POP_WARNINGS static_assert(true)
870#ifndef TOML_DISABLE_WARNINGS
871#define TOML_DISABLE_WARNINGS static_assert(true)
873#ifndef TOML_ENABLE_WARNINGS
874#define TOML_ENABLE_WARNINGS static_assert(true)
876#ifndef TOML_SIMPLE_STATIC_ASSERT_MESSAGES
877#define TOML_SIMPLE_STATIC_ASSERT_MESSAGES 0
890#ifdef TOML_CONFIG_HEADER
891#include TOML_CONFIG_HEADER
895#define TOML_CONFIG_HEADER
903#ifndef TOML_SHARED_LIB
904#define TOML_SHARED_LIB 0
908#if !defined(TOML_HEADER_ONLY) && defined(TOML_ALL_INLINE)
909#define TOML_HEADER_ONLY TOML_ALL_INLINE
911#if !defined(TOML_HEADER_ONLY) || (defined(TOML_HEADER_ONLY) && TOML_HEADER_ONLY) || TOML_INTELLISENSE
912#undef TOML_HEADER_ONLY
913#define TOML_HEADER_ONLY 1
915#if TOML_DOXYGEN || TOML_SHARED_LIB
916#undef TOML_HEADER_ONLY
917#define TOML_HEADER_ONLY 0
935#if defined(TOML_IMPLEMENTATION) || TOML_HEADER_ONLY
936#undef TOML_IMPLEMENTATION
937#define TOML_IMPLEMENTATION 1
939#define TOML_IMPLEMENTATION 0
946#if !defined(TOML_EXPORTED_MEMBER_FUNCTION) && !defined(TOML_EXPORTED_STATIC_FUNCTION) \
947 && !defined(TOML_EXPORTED_FREE_FUNCTION) && !defined(TOML_EXPORTED_CLASS) && defined(TOML_API)
948#define TOML_EXPORTED_MEMBER_FUNCTION TOML_API
949#define TOML_EXPORTED_STATIC_FUNCTION TOML_API
950#define TOML_EXPORTED_FREE_FUNCTION TOML_API
956#undef TOML_EXPORTED_CLASS
957#undef TOML_EXPORTED_MEMBER_FUNCTION
958#undef TOML_EXPORTED_STATIC_FUNCTION
959#undef TOML_EXPORTED_FREE_FUNCTION
961#if TOML_IMPLEMENTATION
962#define TOML_EXPORTED_CLASS __declspec(dllexport)
963#define TOML_EXPORTED_FREE_FUNCTION __declspec(dllexport)
965#define TOML_EXPORTED_CLASS __declspec(dllimport)
966#define TOML_EXPORTED_FREE_FUNCTION __declspec(dllimport)
969#define TOML_CALLCONV __cdecl
971#elif defined(__GNUC__) && __GNUC__ >= 4
972#define TOML_EXPORTED_CLASS __attribute__((visibility("default")))
973#define TOML_EXPORTED_MEMBER_FUNCTION __attribute__((visibility("default")))
974#define TOML_EXPORTED_STATIC_FUNCTION __attribute__((visibility("default")))
975#define TOML_EXPORTED_FREE_FUNCTION __attribute__((visibility("default")))
978#ifndef TOML_EXPORTED_CLASS
979#define TOML_EXPORTED_CLASS
981#ifndef TOML_EXPORTED_MEMBER_FUNCTION
982#define TOML_EXPORTED_MEMBER_FUNCTION
984#ifndef TOML_EXPORTED_STATIC_FUNCTION
985#define TOML_EXPORTED_STATIC_FUNCTION
987#ifndef TOML_EXPORTED_FREE_FUNCTION
988#define TOML_EXPORTED_FREE_FUNCTION
1015#if !defined(TOML_ENABLE_UNRELEASED_FEATURES) && defined(TOML_UNRELEASED_FEATURES)
1017#define TOML_ENABLE_UNRELEASED_FEATURES TOML_UNRELEASED_FEATURES
1019#if (defined(TOML_ENABLE_UNRELEASED_FEATURES) && TOML_ENABLE_UNRELEASED_FEATURES) || TOML_INTELLISENSE
1020#undef TOML_ENABLE_UNRELEASED_FEATURES
1021#define TOML_ENABLE_UNRELEASED_FEATURES 1
1023#ifndef TOML_ENABLE_UNRELEASED_FEATURES
1024#define TOML_ENABLE_UNRELEASED_FEATURES 0
1033#if !defined(TOML_ENABLE_PARSER) && defined(TOML_PARSER)
1034#define TOML_ENABLE_PARSER TOML_PARSER
1036#if !defined(TOML_ENABLE_PARSER) || (defined(TOML_ENABLE_PARSER) && TOML_ENABLE_PARSER) || TOML_INTELLISENSE
1037#undef TOML_ENABLE_PARSER
1038#define TOML_ENABLE_PARSER 1
1047#if !defined(TOML_ENABLE_FORMATTERS) || (defined(TOML_ENABLE_FORMATTERS) && TOML_ENABLE_FORMATTERS) || TOML_INTELLISENSE
1048#undef TOML_ENABLE_FORMATTERS
1049#define TOML_ENABLE_FORMATTERS 1
1062#if !defined(TOML_ENABLE_SIMD) || (defined(TOML_ENABLE_SIMD) && TOML_ENABLE_SIMD) || TOML_INTELLISENSE
1063#undef TOML_ENABLE_SIMD
1064#define TOML_ENABLE_SIMD 1
1068#if !defined(TOML_ENABLE_WINDOWS_COMPAT) && defined(TOML_WINDOWS_COMPAT)
1069#define TOML_ENABLE_WINDOWS_COMPAT TOML_WINDOWS_COMPAT
1071#if !defined(TOML_ENABLE_WINDOWS_COMPAT) || (defined(TOML_ENABLE_WINDOWS_COMPAT) && TOML_ENABLE_WINDOWS_COMPAT) \
1072 || TOML_INTELLISENSE
1073#undef TOML_ENABLE_WINDOWS_COMPAT
1074#define TOML_ENABLE_WINDOWS_COMPAT 1
1078#undef TOML_ENABLE_WINDOWS_COMPAT
1079#define TOML_ENABLE_WINDOWS_COMPAT 0
1082#ifndef TOML_INCLUDE_WINDOWS_H
1083#define TOML_INCLUDE_WINDOWS_H 0
1098#ifdef TOML_OPTIONAL_TYPE
1099#define TOML_HAS_CUSTOM_OPTIONAL_TYPE 1
1101#define TOML_HAS_CUSTOM_OPTIONAL_TYPE 0
1105#define TOML_OPTIONAL_TYPE
1116#if TOML_COMPILER_HAS_EXCEPTIONS
1117#if !defined(TOML_EXCEPTIONS) || (defined(TOML_EXCEPTIONS) && TOML_EXCEPTIONS)
1118#undef TOML_EXCEPTIONS
1119#define TOML_EXCEPTIONS 1
1122#if defined(TOML_EXCEPTIONS) && TOML_EXCEPTIONS
1123#error TOML_EXCEPTIONS was explicitly enabled but exceptions are disabled/unsupported by the compiler.
1125#undef TOML_EXCEPTIONS
1126#define TOML_EXCEPTIONS 0
1133#ifndef TOML_CALLCONV
1134#define TOML_CALLCONV
1142#define TOML_SMALL_FLOAT_TYPE
1149#ifndef TOML_UNDEF_MACROS
1150#define TOML_UNDEF_MACROS 1
1153#ifndef TOML_MAX_NESTED_VALUES
1154#define TOML_MAX_NESTED_VALUES 256
1159#ifdef TOML_CHAR_8_STRINGS
1160#if TOML_CHAR_8_STRINGS
1161#error TOML_CHAR_8_STRINGS was removed in toml++ 2.0.0; all value setters and getters now work with char8_t strings implicitly.
1165#ifdef TOML_LARGE_FILES
1166#if !TOML_LARGE_FILES
1167#error Support for !TOML_LARGE_FILES (i.e. 'small files') was removed in toml++ 3.0.0.
1171#ifndef TOML_LIFETIME_HOOKS
1172#define TOML_LIFETIME_HOOKS 0
1177#define TOML_ASSERT(expr) static_assert(true)
1185#define TOML_ASSERT(expr) assert(expr)
1188#define TOML_ASSERT_ASSUME(expr) TOML_ASSUME(expr)
1190#define TOML_ASSERT_ASSUME(expr) TOML_ASSERT(expr)
1198#define TOML_SMALL_INT_TYPE
1205#ifndef TOML_ENABLE_FLOAT16
1206#define TOML_ENABLE_FLOAT16 0
1219#if !defined(TOML_FLOAT_CHARCONV) && (TOML_GCC || TOML_CLANG || (TOML_ICC && !TOML_ICC_CL))
1222#define TOML_FLOAT_CHARCONV 0
1224#if !defined(TOML_INT_CHARCONV) && (defined(__EMSCRIPTEN__) || defined(__APPLE__))
1227#define TOML_INT_CHARCONV 0
1229#ifndef TOML_INT_CHARCONV
1230#define TOML_INT_CHARCONV 1
1232#ifndef TOML_FLOAT_CHARCONV
1233#define TOML_FLOAT_CHARCONV 1
1235#if (TOML_INT_CHARCONV || TOML_FLOAT_CHARCONV) && !TOML_HAS_INCLUDE(<charconv>)
1236#undef TOML_INT_CHARCONV
1237#undef TOML_FLOAT_CHARCONV
1238#define TOML_INT_CHARCONV 0
1239#define TOML_FLOAT_CHARCONV 0
1247#if defined(__cpp_concepts) && __cpp_concepts >= 201907
1248#define TOML_REQUIRES(...) requires(__VA_ARGS__)
1250#define TOML_REQUIRES(...)
1252#define TOML_ENABLE_IF(...) , typename std::enable_if<(__VA_ARGS__), int>::type = 0
1253#define TOML_CONSTRAINED_TEMPLATE(condition, ...) \
1254 template <__VA_ARGS__ TOML_ENABLE_IF(condition)> \
1255 TOML_REQUIRES(condition)
1256#define TOML_HIDDEN_CONSTRAINT(condition, ...) TOML_CONSTRAINED_TEMPLATE(condition, __VA_ARGS__)
1259#ifndef TOML_CONSTRAINED_TEMPLATE
1260#define TOML_CONSTRAINED_TEMPLATE(condition, ...) template <__VA_ARGS__>
1262#ifndef TOML_HIDDEN_CONSTRAINT
1263#define TOML_HIDDEN_CONSTRAINT(condition, ...)
1271#if defined(__SIZEOF_FLOAT128__) && defined(__FLT128_MANT_DIG__) && defined(__LDBL_MANT_DIG__) \
1272 && __FLT128_MANT_DIG__ > __LDBL_MANT_DIG__
1273#define TOML_FLOAT128 __float128
1280#ifdef __SIZEOF_INT128__
1281#define TOML_INT128 __int128_t
1282#define TOML_UINT128 __uint128_t
1292#define TOML_LIB_SINGLE_HEADER 0
1294#if TOML_ENABLE_UNRELEASED_FEATURES
1295 #define TOML_LANG_EFFECTIVE_VERSION \
1296 TOML_MAKE_VERSION(TOML_LANG_MAJOR, TOML_LANG_MINOR, TOML_LANG_PATCH+1)
1298 #define TOML_LANG_EFFECTIVE_VERSION \
1299 TOML_MAKE_VERSION(TOML_LANG_MAJOR, TOML_LANG_MINOR, TOML_LANG_PATCH)
1302#define TOML_LANG_HIGHER_THAN(major, minor, patch) \
1303 (TOML_LANG_EFFECTIVE_VERSION > TOML_MAKE_VERSION(major, minor, patch))
1305#define TOML_LANG_AT_LEAST(major, minor, patch) \
1306 (TOML_LANG_EFFECTIVE_VERSION >= TOML_MAKE_VERSION(major, minor, patch))
1308#define TOML_LANG_UNRELEASED \
1309 TOML_LANG_HIGHER_THAN(TOML_LANG_MAJOR, TOML_LANG_MINOR, TOML_LANG_PATCH)
1311#ifndef TOML_ABI_NAMESPACES
1313 #define TOML_ABI_NAMESPACES 0
1315 #define TOML_ABI_NAMESPACES 1
1318#if TOML_ABI_NAMESPACES
1319 #define TOML_NAMESPACE_START namespace toml { inline namespace TOML_CONCAT(v, TOML_LIB_MAJOR)
1320 #define TOML_NAMESPACE_END } static_assert(true)
1321 #define TOML_NAMESPACE ::toml::TOML_CONCAT(v, TOML_LIB_MAJOR)
1322 #define TOML_ABI_NAMESPACE_START(name) inline namespace name { static_assert(true)
1323 #define TOML_ABI_NAMESPACE_BOOL(cond, T, F) TOML_ABI_NAMESPACE_START(TOML_CONCAT(TOML_EVAL_BOOL_, cond)(T, F))
1324 #define TOML_ABI_NAMESPACE_END } static_assert(true)
1326 #define TOML_NAMESPACE_START namespace toml
1327 #define TOML_NAMESPACE_END static_assert(true)
1328 #define TOML_NAMESPACE toml
1329 #define TOML_ABI_NAMESPACE_START(...) static_assert(true)
1330 #define TOML_ABI_NAMESPACE_BOOL(...) static_assert(true)
1331 #define TOML_ABI_NAMESPACE_END static_assert(true)
1333#define TOML_IMPL_NAMESPACE_START TOML_NAMESPACE_START { namespace impl
1334#define TOML_IMPL_NAMESPACE_END } TOML_NAMESPACE_END
1336 #define TOML_ANON_NAMESPACE_START static_assert(TOML_IMPLEMENTATION); TOML_IMPL_NAMESPACE_START
1337 #define TOML_ANON_NAMESPACE_END TOML_IMPL_NAMESPACE_END
1338 #define TOML_ANON_NAMESPACE TOML_NAMESPACE::impl
1339 #define TOML_EXTERNAL_LINKAGE inline
1340 #define TOML_INTERNAL_LINKAGE inline
1342 #define TOML_ANON_NAMESPACE_START static_assert(TOML_IMPLEMENTATION); \
1343 using namespace toml; \
1345 #define TOML_ANON_NAMESPACE_END static_assert(true)
1346 #define TOML_ANON_NAMESPACE
1347 #define TOML_EXTERNAL_LINKAGE
1348 #define TOML_INTERNAL_LINKAGE static
1362#if TOML_SIMPLE_STATIC_ASSERT_MESSAGES
1364 #define TOML_SA_NEWLINE " "
1365 #define TOML_SA_LIST_SEP ", "
1366 #define TOML_SA_LIST_BEG " ("
1367 #define TOML_SA_LIST_END ")"
1368 #define TOML_SA_LIST_NEW " "
1369 #define TOML_SA_LIST_NXT ", "
1373 #define TOML_SA_NEWLINE "\n| "
1374 #define TOML_SA_LIST_SEP TOML_SA_NEWLINE " - "
1375 #define TOML_SA_LIST_BEG TOML_SA_LIST_SEP
1376 #define TOML_SA_LIST_END
1377 #define TOML_SA_LIST_NEW TOML_SA_NEWLINE TOML_SA_NEWLINE
1378 #define TOML_SA_LIST_NXT TOML_SA_LIST_NEW
1382#define TOML_SA_NATIVE_VALUE_TYPE_LIST \
1383 TOML_SA_LIST_BEG "std::string" \
1384 TOML_SA_LIST_SEP "int64_t" \
1385 TOML_SA_LIST_SEP "double" \
1386 TOML_SA_LIST_SEP "bool" \
1387 TOML_SA_LIST_SEP "toml::date" \
1388 TOML_SA_LIST_SEP "toml::time" \
1389 TOML_SA_LIST_SEP "toml::date_time" \
1392#define TOML_SA_NODE_TYPE_LIST \
1393 TOML_SA_LIST_BEG "toml::table" \
1394 TOML_SA_LIST_SEP "toml::array" \
1395 TOML_SA_LIST_SEP "toml::value<std::string>" \
1396 TOML_SA_LIST_SEP "toml::value<int64_t>" \
1397 TOML_SA_LIST_SEP "toml::value<double>" \
1398 TOML_SA_LIST_SEP "toml::value<bool>" \
1399 TOML_SA_LIST_SEP "toml::value<toml::date>" \
1400 TOML_SA_LIST_SEP "toml::value<toml::time>" \
1401 TOML_SA_LIST_SEP "toml::value<toml::date_time>" \
1404#define TOML_SA_UNWRAPPED_NODE_TYPE_LIST \
1405 TOML_SA_LIST_NEW "A native TOML value type" \
1406 TOML_SA_NATIVE_VALUE_TYPE_LIST \
1408 TOML_SA_LIST_NXT "A TOML node type" \
1409 TOML_SA_NODE_TYPE_LIST
#define TOML_DISABLE_WARNINGS
Definition preprocessor.hpp:871
#define TOML_ENABLE_WARNINGS
Definition preprocessor.hpp:874