Selaa lähdekoodia

Updated to toml++ 3.3.0.7eb2ffc

Brucey 2 vuotta sitten
vanhempi
commit
3535e87b00
3 muutettua tiedostoa jossa 216 lisäystä ja 70 poistoa
  1. 3 1
      toml.mod/toml.bmx
  2. 3 3
      toml.mod/tomlplusplus/README.md
  3. 210 66
      toml.mod/tomlplusplus/toml.hpp

+ 3 - 1
toml.mod/toml.bmx

@@ -25,12 +25,14 @@ bbdoc: A TOML decoder.
 End Rem
 End Rem
 Module Text.Toml
 Module Text.Toml
 
 
-ModuleInfo "Version: 1.00"
+ModuleInfo "Version: 1.01"
 ModuleInfo "Author: Bruce A Henderson"
 ModuleInfo "Author: Bruce A Henderson"
 ModuleInfo "License: MIT"
 ModuleInfo "License: MIT"
 ModuleInfo "toml.hpp - Copyright (c) Mark Gillard"
 ModuleInfo "toml.hpp - Copyright (c) Mark Gillard"
 ModuleInfo "Copyright: 2023 Bruce A Henderson"
 ModuleInfo "Copyright: 2023 Bruce A Henderson"
 
 
+ModuleInfo "History: 1.01"
+ModuleInfo "History: Updated to toml++ 3.3.0.7eb2ffc"
 ModuleInfo "History: 1.00"
 ModuleInfo "History: 1.00"
 ModuleInfo "History: Initial Release"
 ModuleInfo "History: Initial Release"
 
 

+ 3 - 3
toml.mod/tomlplusplus/README.md

@@ -113,7 +113,7 @@ You'll find some more code examples in the `examples` directory, and plenty more
 
 
 ### Conan
 ### Conan
 
 
-Add `tomlplusplus/3.2.0` to your conanfile.
+Add `tomlplusplus/3.3.0` to your conanfile.
 
 
 ### DDS
 ### DDS
 
 
@@ -121,7 +121,7 @@ Add `tomlpp` to your `package.json5`, e.g.:
 
 
 ```plaintext
 ```plaintext
 depends: [
 depends: [
-    'tomlpp^3.2.0',
+    'tomlpp^3.3.0',
 ]
 ]
 ```
 ```
 
 
@@ -166,7 +166,7 @@ include(FetchContent)
 FetchContent_Declare(
 FetchContent_Declare(
     tomlplusplus
     tomlplusplus
     GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
     GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
-    GIT_TAG        v3.2.0
+    GIT_TAG        v3.3.0
 )
 )
 FetchContent_MakeAvailable(tomlplusplus)
 FetchContent_MakeAvailable(tomlplusplus)
 ```
 ```

+ 210 - 66
toml.mod/tomlplusplus/toml.hpp

@@ -1,6 +1,6 @@
 //----------------------------------------------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------------------------------------------
 //
 //
-// toml++ v3.2.0
+// toml++ v3.3.0
 // https://github.com/marzer/tomlplusplus
 // https://github.com/marzer/tomlplusplus
 // SPDX-License-Identifier: MIT
 // SPDX-License-Identifier: MIT
 //
 //
@@ -70,8 +70,11 @@
 #endif
 #endif
 #endif
 #endif
 
 
+#define TOML_MAKE_VERSION(major, minor, patch) (((major)*10000) + ((minor)*100) + ((patch)))
+
 #ifdef __clang__
 #ifdef __clang__
-#define TOML_CLANG __clang_major__
+#define TOML_CLANG		   __clang_major__
+#define TOML_CLANG_VERSION TOML_MAKE_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__)
 #else
 #else
 #define TOML_CLANG 0
 #define TOML_CLANG 0
 #endif
 #endif
@@ -112,6 +115,33 @@
 #define TOML_INTELLISENSE 0
 #define TOML_INTELLISENSE 0
 #endif
 #endif
 
 
+// special handling for apple clang; see:
+// - https://github.com/marzer/tomlplusplus/issues/189
+// - https://en.wikipedia.org/wiki/Xcode
+// - https://stackoverflow.com/questions/19387043/how-can-i-reliably-detect-the-version-of-clang-at-preprocessing-time
+#if TOML_CLANG && defined(__apple_build_version__)
+#undef TOML_CLANG
+#if TOML_CLANG_VERSION >= TOML_MAKE_VERSION(14, 0, 0)
+#define TOML_CLANG 14
+#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(13, 1, 6)
+#define TOML_CLANG 13
+#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(13, 0, 0)
+#define TOML_CLANG 12
+#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(12, 0, 5)
+#define TOML_CLANG 11
+#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(12, 0, 0)
+#define TOML_CLANG 10
+#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(11, 0, 3)
+#define TOML_CLANG 9
+#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(11, 0, 0)
+#define TOML_CLANG 8
+#elif TOML_CLANG_VERSION >= TOML_MAKE_VERSION(10, 0, 1)
+#define TOML_CLANG 7
+#else
+#define TOML_CLANG 6 // not strictly correct but doesn't matter below this
+#endif
+#endif
+
 // IA64
 // IA64
 #if defined(__ia64__) || defined(__ia64) || defined(_IA64) || defined(__IA64__) || defined(_M_IA64)
 #if defined(__ia64__) || defined(__ia64) || defined(_IA64) || defined(__IA64__) || defined(_M_IA64)
 #define TOML_ARCH_ITANIUM 1
 #define TOML_ARCH_ITANIUM 1
@@ -464,6 +494,7 @@
 
 
 #define TOML_PUSH_WARNINGS                                                                                             \
 #define TOML_PUSH_WARNINGS                                                                                             \
 	TOML_PRAGMA_CLANG(diagnostic push)                                                                                 \
 	TOML_PRAGMA_CLANG(diagnostic push)                                                                                 \
+	TOML_PRAGMA_CLANG(diagnostic ignored "-Wunknown-warning-option")                                                   \
 	static_assert(true)
 	static_assert(true)
 
 
 #define TOML_DISABLE_SWITCH_WARNINGS                                                                                   \
 #define TOML_DISABLE_SWITCH_WARNINGS                                                                                   \
@@ -510,7 +541,7 @@
 	__pragma(warning(push))                                                                                            \
 	__pragma(warning(push))                                                                                            \
 	static_assert(true)
 	static_assert(true)
 
 
-#if TOML_HAS_INCLUDE(<CodeAnalysis / Warnings.h>)
+#if TOML_HAS_INCLUDE(<CodeAnalysis/Warnings.h>)
 #pragma warning(push, 0)
 #pragma warning(push, 0)
 #include <CodeAnalysis/Warnings.h>
 #include <CodeAnalysis/Warnings.h>
 #pragma warning(pop)
 #pragma warning(pop)
@@ -896,6 +927,10 @@ TOML_ENABLE_WARNINGS;
 #define TOML_ASSERT_ASSUME(expr) TOML_ASSERT(expr)
 #define TOML_ASSERT_ASSUME(expr) TOML_ASSERT(expr)
 #endif
 #endif
 
 
+#ifndef TOML_ENABLE_FLOAT16
+#define TOML_ENABLE_FLOAT16 0
+#endif
+
 #if !defined(TOML_FLOAT_CHARCONV) && (TOML_GCC || TOML_CLANG || (TOML_ICC && !TOML_ICC_CL))
 #if !defined(TOML_FLOAT_CHARCONV) && (TOML_GCC || TOML_CLANG || (TOML_ICC && !TOML_ICC_CL))
 // not supported by any version of GCC or Clang as of 26/11/2020
 // not supported by any version of GCC or Clang as of 26/11/2020
 // not supported by any version of ICC on Linux as of 11/01/2021
 // not supported by any version of ICC on Linux as of 11/01/2021
@@ -930,53 +965,6 @@ TOML_ENABLE_WARNINGS;
 	TOML_REQUIRES(condition)
 	TOML_REQUIRES(condition)
 #define TOML_HIDDEN_CONSTRAINT(condition, ...) TOML_CONSTRAINED_TEMPLATE(condition, __VA_ARGS__)
 #define TOML_HIDDEN_CONSTRAINT(condition, ...) TOML_CONSTRAINED_TEMPLATE(condition, __VA_ARGS__)
 
 
-#ifndef TOML_ENABLE_FLOAT16
-
-#ifdef __FLT16_MANT_DIG__
-#define TOML_FLOAT16_MANT_DIG	__FLT16_MANT_DIG__
-#define TOML_FLOAT16_DIG		__FLT16_DIG__
-#define TOML_FLOAT16_MIN_EXP	__FLT16_MIN_EXP__
-#define TOML_FLOAT16_MIN_10_EXP __FLT16_MIN_10_EXP__
-#define TOML_FLOAT16_MAX_EXP	__FLT16_MAX_EXP__
-#define TOML_FLOAT16_MAX_10_EXP __FLT16_MAX_10_EXP__
-#else
-#define TOML_FLOAT16_MANT_DIG	0
-#define TOML_FLOAT16_DIG		0
-#define TOML_FLOAT16_MIN_EXP	0
-#define TOML_FLOAT16_MIN_10_EXP 0
-#define TOML_FLOAT16_MAX_EXP	0
-#define TOML_FLOAT16_MAX_10_EXP 0
-#endif
-
-#if (TOML_FLOAT16_MANT_DIG && TOML_FLOAT16_DIG && TOML_FLOAT16_MIN_EXP && TOML_FLOAT16_MIN_10_EXP                      \
-	 && TOML_FLOAT16_MAX_EXP && TOML_FLOAT16_MAX_10_EXP)
-#define TOML_FLOAT16_LIMITS_SET 1
-#else
-#define TOML_FLOAT16_LIMITS_SET 0
-#endif
-
-#if TOML_FLOAT16_LIMITS_SET
-
-#if TOML_CLANG // >= 15
-#if (TOML_ARCH_ARM || TOML_ARCH_AMD64 || TOML_ARCH_X86)
-#define TOML_ENABLE_FLOAT16 1
-#endif
-
-#elif TOML_GCC
-#if (TOML_ARCH_ARM || TOML_ARCH_AMD64 /* || TOML_ARCH_X86*/)
-#define TOML_ENABLE_FLOAT16 1
-#endif
-
-#endif // clang/gcc
-
-#endif // TOML_FLOAT16_LIMITS_SET
-
-#endif // !defined(TOML_ENABLE_FLOAT16)
-
-#ifndef TOML_ENABLE_FLOAT16
-#define TOML_ENABLE_FLOAT16 0
-#endif
-
 #if defined(__SIZEOF_FLOAT128__) && defined(__FLT128_MANT_DIG__) && defined(__LDBL_MANT_DIG__)                         \
 #if defined(__SIZEOF_FLOAT128__) && defined(__FLT128_MANT_DIG__) && defined(__LDBL_MANT_DIG__)                         \
 	&& __FLT128_MANT_DIG__ > __LDBL_MANT_DIG__
 	&& __FLT128_MANT_DIG__ > __LDBL_MANT_DIG__
 #define TOML_FLOAT128 __float128
 #define TOML_FLOAT128 __float128
@@ -992,7 +980,7 @@ TOML_ENABLE_WARNINGS;
 //********  impl/version.h  ********************************************************************************************
 //********  impl/version.h  ********************************************************************************************
 
 
 #define TOML_LIB_MAJOR 3
 #define TOML_LIB_MAJOR 3
-#define TOML_LIB_MINOR 2
+#define TOML_LIB_MINOR 3
 #define TOML_LIB_PATCH 0
 #define TOML_LIB_PATCH 0
 
 
 #define TOML_LANG_MAJOR 1
 #define TOML_LANG_MAJOR 1
@@ -1003,9 +991,6 @@ TOML_ENABLE_WARNINGS;
 
 
 #define	TOML_LIB_SINGLE_HEADER 1
 #define	TOML_LIB_SINGLE_HEADER 1
 
 
-#define TOML_MAKE_VERSION(major, minor, patch)											\
-		((major) * 10000 + (minor) * 100 + (patch))
-
 #if TOML_ENABLE_UNRELEASED_FEATURES
 #if TOML_ENABLE_UNRELEASED_FEATURES
 	#define TOML_LANG_EFFECTIVE_VERSION													\
 	#define TOML_LANG_EFFECTIVE_VERSION													\
 		TOML_MAKE_VERSION(TOML_LANG_MAJOR, TOML_LANG_MINOR, TOML_LANG_PATCH+1)
 		TOML_MAKE_VERSION(TOML_LANG_MAJOR, TOML_LANG_MINOR, TOML_LANG_PATCH+1)
@@ -1130,12 +1115,12 @@ TOML_DISABLE_SUGGEST_ATTR_WARNINGS;
 #pragma warning(disable : 4251) // dll exports for std lib types
 #pragma warning(disable : 4251) // dll exports for std lib types
 #endif
 #endif
 #elif TOML_CLANG
 #elif TOML_CLANG
-#pragma clang diagnostic ignored "-Wheader-hygiene"
+TOML_PRAGMA_CLANG(diagnostic ignored "-Wheader-hygiene")
 #if TOML_CLANG >= 12
 #if TOML_CLANG >= 12
-#pragma clang diagnostic ignored "-Wc++20-extensions"
+TOML_PRAGMA_CLANG(diagnostic ignored "-Wc++20-extensions")
 #endif
 #endif
-#if (TOML_CLANG == 13) && !defined(__APPLE__)
-#pragma clang diagnostic ignored "-Wreserved-identifier"
+#if TOML_CLANG == 13
+TOML_PRAGMA_CLANG(diagnostic ignored "-Wreserved-identifier")
 #endif
 #endif
 #endif
 #endif
 
 
@@ -1145,7 +1130,7 @@ TOML_DISABLE_WARNINGS;
 #include <new>
 #include <new>
 TOML_ENABLE_WARNINGS;
 TOML_ENABLE_WARNINGS;
 
 
-#if TOML_CLANG >= 8 || TOML_GCC >= 7 || TOML_ICC >= 1910 || TOML_MSVC >= 1914
+#if (!defined(__apple_build_version__) && TOML_CLANG >= 8) || TOML_GCC >= 7 || TOML_ICC >= 1910 || TOML_MSVC >= 1914
 #define TOML_LAUNDER(x) __builtin_launder(x)
 #define TOML_LAUNDER(x) __builtin_launder(x)
 #elif defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
 #elif defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
 #define TOML_LAUNDER(x) std::launder(x)
 #define TOML_LAUNDER(x) std::launder(x)
@@ -1238,7 +1223,9 @@ TOML_DISABLE_WARNINGS;
 TOML_ENABLE_WARNINGS;
 TOML_ENABLE_WARNINGS;
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -2144,15 +2131,19 @@ TOML_IMPL_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/print_to_stream.h  ************************************************************************************
 //********  impl/print_to_stream.h  ************************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -2280,15 +2271,19 @@ TOML_IMPL_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/source_region.h  **************************************************************************************
 //********  impl/source_region.h  **************************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -2400,15 +2395,19 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/date_time.h  ******************************************************************************************
 //********  impl/date_time.h  ******************************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -2740,8 +2739,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/at_path.h  ********************************************************************************************
 //********  impl/at_path.h  ********************************************************************************************
@@ -2794,7 +2795,9 @@ TOML_ENABLE_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -3375,8 +3378,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/std_utility.h  ****************************************************************************************
 //********  impl/std_utility.h  ****************************************************************************************
@@ -3389,7 +3394,9 @@ TOML_ENABLE_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -3992,8 +3999,10 @@ TOML_IMPL_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/std_initializer_list.h  *******************************************************************************
 //********  impl/std_initializer_list.h  *******************************************************************************
@@ -4006,7 +4015,9 @@ TOML_ENABLE_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -4511,15 +4522,19 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/value.h  **********************************************************************************************
 //********  impl/value.h  **********************************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -5587,15 +5602,19 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/make_node.h  ******************************************************************************************
 //********  impl/make_node.h  ******************************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -5763,15 +5782,19 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/array.h  **********************************************************************************************
 //********  impl/array.h  **********************************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -6854,15 +6877,19 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/key.h  ************************************************************************************************
 //********  impl/key.h  ************************************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -7113,8 +7140,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/std_map.h  ********************************************************************************************
 //********  impl/std_map.h  ********************************************************************************************
@@ -7128,7 +7157,9 @@ TOML_ENABLE_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -8273,15 +8304,19 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/unicode_autogenerated.h  ******************************************************************************
 //********  impl/unicode_autogenerated.h  ******************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -8461,15 +8496,19 @@ TOML_IMPL_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/unicode.h  ********************************************************************************************
 //********  impl/unicode.h  ********************************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -8663,8 +8702,10 @@ TOML_IMPL_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/parse_error.h  ****************************************************************************************
 //********  impl/parse_error.h  ****************************************************************************************
@@ -8683,7 +8724,9 @@ TOML_ENABLE_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -8785,8 +8828,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_PARSER
 #endif // TOML_ENABLE_PARSER
@@ -8797,7 +8842,9 @@ TOML_POP_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -9132,8 +9179,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_PARSER && !TOML_EXCEPTIONS
 #endif // TOML_ENABLE_PARSER && !TOML_EXCEPTIONS
@@ -9144,7 +9193,9 @@ TOML_POP_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -9247,8 +9298,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_PARSER
 #endif // TOML_ENABLE_PARSER
@@ -9259,7 +9312,9 @@ TOML_POP_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -9443,8 +9498,10 @@ TOML_IMPL_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_FORMATTERS
 #endif // TOML_ENABLE_FORMATTERS
@@ -9455,7 +9512,9 @@ TOML_POP_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -9544,8 +9603,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_FORMATTERS
 #endif // TOML_ENABLE_FORMATTERS
@@ -9556,7 +9617,9 @@ TOML_POP_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -9630,8 +9693,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_FORMATTERS
 #endif // TOML_ENABLE_FORMATTERS
@@ -9642,7 +9707,9 @@ TOML_POP_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -9721,8 +9788,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_FORMATTERS
 #endif // TOML_ENABLE_FORMATTERS
@@ -9759,7 +9828,9 @@ extern "C" __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -9826,8 +9897,10 @@ TOML_IMPL_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_WINDOWS
 #endif // TOML_WINDOWS
@@ -9848,7 +9921,9 @@ TOML_DISABLE_WARNINGS;
 TOML_ENABLE_WARNINGS;
 TOML_ENABLE_WARNINGS;
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -10313,15 +10388,19 @@ TOML_IMPL_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/node.inl  *********************************************************************************************
 //********  impl/node.inl  *********************************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -10450,8 +10529,10 @@ TOML_IMPL_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/at_path.inl  ******************************************************************************************
 //********  impl/at_path.inl  ******************************************************************************************
@@ -10465,7 +10546,9 @@ TOML_DISABLE_WARNINGS;
 TOML_ENABLE_WARNINGS;
 TOML_ENABLE_WARNINGS;
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -10739,8 +10822,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/path.inl  *********************************************************************************************
 //********  impl/path.inl  *********************************************************************************************
@@ -10753,7 +10838,9 @@ TOML_DISABLE_WARNINGS;
 TOML_ENABLE_WARNINGS;
 TOML_ENABLE_WARNINGS;
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -11237,15 +11324,19 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/array.inl  ********************************************************************************************
 //********  impl/array.inl  ********************************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -11620,15 +11711,19 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/table.inl  ********************************************************************************************
 //********  impl/table.inl  ********************************************************************************************
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -11938,8 +12033,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/simd.h  ***********************************************************************************************
 //********  impl/simd.h  ***********************************************************************************************
@@ -11977,7 +12074,9 @@ TOML_ENABLE_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -12029,8 +12128,10 @@ TOML_IMPL_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 //********  impl/parser.inl  *******************************************************************************************
 //********  impl/parser.inl  *******************************************************************************************
@@ -12052,7 +12153,9 @@ TOML_DISABLE_WARNINGS;
 TOML_ENABLE_WARNINGS;
 TOML_ENABLE_WARNINGS;
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -14277,14 +14380,21 @@ TOML_IMPL_NAMESPACE_START
 				}
 				}
 
 
 				// range check
 				// range check
-				if TOML_UNLIKELY(result > static_cast<uint64_t>((std::numeric_limits<int64_t>::max)()) + (sign < 0 ? 1ull : 0ull))
+				static constexpr auto i64_max = static_cast<uint64_t>((std::numeric_limits<int64_t>::max)());
+				if TOML_UNLIKELY(result > i64_max + (sign < 0 ? 1u : 0u))
 					set_error_and_return_default("'"sv,
 					set_error_and_return_default("'"sv,
 												 traits::full_prefix,
 												 traits::full_prefix,
 												 std::string_view{ digits, length },
 												 std::string_view{ digits, length },
 												 "' is not representable in 64 bits"sv);
 												 "' is not representable in 64 bits"sv);
 
 
 				if constexpr (traits::is_signed)
 				if constexpr (traits::is_signed)
+				{
+					// avoid signed multiply UB when parsing INT64_MIN
+					if TOML_UNLIKELY(sign < 0 && result == i64_max + 1u)
+						return (std::numeric_limits<int64_t>::min)();
+
 					return static_cast<int64_t>(result) * sign;
 					return static_cast<int64_t>(result) * sign;
+				}
 				else
 				else
 					return static_cast<int64_t>(result);
 					return static_cast<int64_t>(result);
 			}
 			}
@@ -15266,13 +15376,28 @@ TOML_IMPL_NAMESPACE_START
 
 
 				else if (auto tbl = matching_node.as_table(); !is_arr && tbl && !implicit_tables.empty())
 				else if (auto tbl = matching_node.as_table(); !is_arr && tbl && !implicit_tables.empty())
 				{
 				{
-					if (auto found = impl::find(implicit_tables.begin(), implicit_tables.end(), tbl);
-						found && (tbl->empty() || tbl->is_homogeneous<table>()))
+					if (auto found = impl::find(implicit_tables.begin(), implicit_tables.end(), tbl); found)
 					{
 					{
-						implicit_tables.erase(implicit_tables.cbegin() + (found - implicit_tables.data()));
-						tbl->source_.begin = header_begin_pos;
-						tbl->source_.end   = header_end_pos;
-						return tbl;
+						bool ok = true;
+						if (!tbl->empty())
+						{
+							for (auto& [_, child] : *tbl)
+							{
+								if (!child.is_table() && !child.is_array_of_tables())
+								{
+									ok = false;
+									break;
+								}
+							}
+						}
+
+						if (ok)
+						{
+							implicit_tables.erase(implicit_tables.cbegin() + (found - implicit_tables.data()));
+							tbl->source_.begin = header_begin_pos;
+							tbl->source_.end   = header_end_pos;
+							return tbl;
+						}
 					}
 					}
 				}
 				}
 
 
@@ -15904,8 +16029,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_PARSER
 #endif // TOML_ENABLE_PARSER
@@ -15916,7 +16043,9 @@ TOML_POP_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -16414,8 +16543,10 @@ TOML_IMPL_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_FORMATTERS
 #endif // TOML_ENABLE_FORMATTERS
@@ -16426,7 +16557,9 @@ TOML_POP_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -16818,8 +16951,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_FORMATTERS
 #endif // TOML_ENABLE_FORMATTERS
@@ -16830,7 +16965,9 @@ TOML_POP_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -16939,8 +17076,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_FORMATTERS
 #endif // TOML_ENABLE_FORMATTERS
@@ -16951,7 +17090,9 @@ TOML_POP_WARNINGS;
 
 
 TOML_PUSH_WARNINGS;
 TOML_PUSH_WARNINGS;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
+#ifndef __clang__
 #pragma inline_recursion(on)
 #pragma inline_recursion(on)
+#endif
 #pragma push_macro("min")
 #pragma push_macro("min")
 #pragma push_macro("max")
 #pragma push_macro("max")
 #undef min
 #undef min
@@ -17104,8 +17245,10 @@ TOML_NAMESPACE_END;
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma pop_macro("min")
 #pragma pop_macro("min")
 #pragma pop_macro("max")
 #pragma pop_macro("max")
+#ifndef __clang__
 #pragma inline_recursion(off)
 #pragma inline_recursion(off)
 #endif
 #endif
+#endif
 TOML_POP_WARNINGS;
 TOML_POP_WARNINGS;
 
 
 #endif // TOML_ENABLE_FORMATTERS
 #endif // TOML_ENABLE_FORMATTERS
@@ -17137,6 +17280,7 @@ TOML_POP_WARNINGS;
 #undef TOML_ASYMMETRICAL_EQUALITY_OPS
 #undef TOML_ASYMMETRICAL_EQUALITY_OPS
 #undef TOML_ATTR
 #undef TOML_ATTR
 #undef TOML_CLANG
 #undef TOML_CLANG
+#undef TOML_CLANG_VERSION
 #undef TOML_CLOSED_ENUM
 #undef TOML_CLOSED_ENUM
 #undef TOML_CLOSED_FLAGS_ENUM
 #undef TOML_CLOSED_FLAGS_ENUM
 #undef TOML_COMPILER_HAS_EXCEPTIONS
 #undef TOML_COMPILER_HAS_EXCEPTIONS