From 00a9d11f8b0369ed5b9ba4b20affe97c735b9013 Mon Sep 17 00:00:00 2001 From: Jacyking <791026912@qq.com> Date: Tue, 29 Aug 2023 10:38:17 +0800 Subject: [PATCH] update iguana for gcc8.3 --- iguana/enum_reflection.hpp | 11 + iguana/reflection.hpp | 730 ++++++++++++++++++------------------- iguana/xml_reader.hpp | 3 +- iguana/xml_writer.hpp | 2 +- iguana/yaml_reader.hpp | 9 +- 5 files changed, 376 insertions(+), 379 deletions(-) diff --git a/iguana/enum_reflection.hpp b/iguana/enum_reflection.hpp index afca0c50..7afaaaeb 100644 --- a/iguana/enum_reflection.hpp +++ b/iguana/enum_reflection.hpp @@ -6,6 +6,10 @@ #include "frozen/unordered_map.h" namespace iguana { + +#if defined(__clang__) || defined(_MSC_VER) || \ + (defined(__GNUC__) && __GNUC__ > 8) + template constexpr std::string_view get_raw_name() { #ifdef _MSC_VER return __FUNCSIG__; @@ -130,6 +134,8 @@ get_str_to_enum_map(const std::array &enum_names, {enum_names[Is], enum_values[Is]}...}; } +#endif + // the default generic enum_value // if the user has not defined a specialization template, this will be called template struct enum_value { @@ -137,6 +143,8 @@ template struct enum_value { }; template constexpr inline auto get_enum_map() { +#if defined(__clang__) || defined(_MSC_VER) || \ + (defined(__GNUC__) && __GNUC__ > 8) constexpr auto &arr = enum_value::value; constexpr auto arr_size = arr.size(); if constexpr (arr_size > 0) { @@ -156,6 +164,9 @@ template constexpr inline auto get_enum_map() { } else { return false; } +#else + return false; +#endif } #if defined(__clang__) && (__clang_major__ >= 17) diff --git a/iguana/reflection.hpp b/iguana/reflection.hpp index f4ee98fe..09a0f652 100644 --- a/iguana/reflection.hpp +++ b/iguana/reflection.hpp @@ -27,486 +27,486 @@ namespace iguana::detail { /******************************************/ /* arg list expand macro, now support 120 args */ #define MAKE_ARG_LIST_1(op, arg, ...) op(arg) -#define MAKE_ARG_LIST_2(op, arg, ...) \ +#define MAKE_ARG_LIST_2(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_1(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_3(op, arg, ...) \ +#define MAKE_ARG_LIST_3(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_2(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_4(op, arg, ...) \ +#define MAKE_ARG_LIST_4(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_3(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_5(op, arg, ...) \ +#define MAKE_ARG_LIST_5(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_4(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_6(op, arg, ...) \ +#define MAKE_ARG_LIST_6(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_5(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_7(op, arg, ...) \ +#define MAKE_ARG_LIST_7(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_6(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_8(op, arg, ...) \ +#define MAKE_ARG_LIST_8(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_7(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_9(op, arg, ...) \ +#define MAKE_ARG_LIST_9(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_8(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_10(op, arg, ...) \ +#define MAKE_ARG_LIST_10(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_9(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_11(op, arg, ...) \ +#define MAKE_ARG_LIST_11(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_10(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_12(op, arg, ...) \ +#define MAKE_ARG_LIST_12(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_11(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_13(op, arg, ...) \ +#define MAKE_ARG_LIST_13(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_12(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_14(op, arg, ...) \ +#define MAKE_ARG_LIST_14(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_13(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_15(op, arg, ...) \ +#define MAKE_ARG_LIST_15(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_14(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_16(op, arg, ...) \ +#define MAKE_ARG_LIST_16(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_15(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_17(op, arg, ...) \ +#define MAKE_ARG_LIST_17(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_16(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_18(op, arg, ...) \ +#define MAKE_ARG_LIST_18(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_17(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_19(op, arg, ...) \ +#define MAKE_ARG_LIST_19(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_18(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_20(op, arg, ...) \ +#define MAKE_ARG_LIST_20(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_19(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_21(op, arg, ...) \ +#define MAKE_ARG_LIST_21(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_20(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_22(op, arg, ...) \ +#define MAKE_ARG_LIST_22(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_21(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_23(op, arg, ...) \ +#define MAKE_ARG_LIST_23(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_22(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_24(op, arg, ...) \ +#define MAKE_ARG_LIST_24(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_23(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_25(op, arg, ...) \ +#define MAKE_ARG_LIST_25(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_24(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_26(op, arg, ...) \ +#define MAKE_ARG_LIST_26(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_25(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_27(op, arg, ...) \ +#define MAKE_ARG_LIST_27(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_26(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_28(op, arg, ...) \ +#define MAKE_ARG_LIST_28(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_27(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_29(op, arg, ...) \ +#define MAKE_ARG_LIST_29(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_28(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_30(op, arg, ...) \ +#define MAKE_ARG_LIST_30(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_29(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_31(op, arg, ...) \ +#define MAKE_ARG_LIST_31(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_30(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_32(op, arg, ...) \ +#define MAKE_ARG_LIST_32(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_31(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_33(op, arg, ...) \ +#define MAKE_ARG_LIST_33(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_32(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_34(op, arg, ...) \ +#define MAKE_ARG_LIST_34(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_33(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_35(op, arg, ...) \ +#define MAKE_ARG_LIST_35(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_34(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_36(op, arg, ...) \ +#define MAKE_ARG_LIST_36(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_35(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_37(op, arg, ...) \ +#define MAKE_ARG_LIST_37(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_36(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_38(op, arg, ...) \ +#define MAKE_ARG_LIST_38(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_37(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_39(op, arg, ...) \ +#define MAKE_ARG_LIST_39(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_38(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_40(op, arg, ...) \ +#define MAKE_ARG_LIST_40(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_39(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_41(op, arg, ...) \ +#define MAKE_ARG_LIST_41(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_40(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_42(op, arg, ...) \ +#define MAKE_ARG_LIST_42(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_41(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_43(op, arg, ...) \ +#define MAKE_ARG_LIST_43(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_42(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_44(op, arg, ...) \ +#define MAKE_ARG_LIST_44(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_43(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_45(op, arg, ...) \ +#define MAKE_ARG_LIST_45(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_44(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_46(op, arg, ...) \ +#define MAKE_ARG_LIST_46(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_45(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_47(op, arg, ...) \ +#define MAKE_ARG_LIST_47(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_46(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_48(op, arg, ...) \ +#define MAKE_ARG_LIST_48(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_47(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_49(op, arg, ...) \ +#define MAKE_ARG_LIST_49(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_48(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_50(op, arg, ...) \ +#define MAKE_ARG_LIST_50(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_49(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_51(op, arg, ...) \ +#define MAKE_ARG_LIST_51(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_50(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_52(op, arg, ...) \ +#define MAKE_ARG_LIST_52(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_51(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_53(op, arg, ...) \ +#define MAKE_ARG_LIST_53(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_52(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_54(op, arg, ...) \ +#define MAKE_ARG_LIST_54(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_53(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_55(op, arg, ...) \ +#define MAKE_ARG_LIST_55(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_54(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_56(op, arg, ...) \ +#define MAKE_ARG_LIST_56(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_55(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_57(op, arg, ...) \ +#define MAKE_ARG_LIST_57(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_56(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_58(op, arg, ...) \ +#define MAKE_ARG_LIST_58(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_57(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_59(op, arg, ...) \ +#define MAKE_ARG_LIST_59(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_58(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_60(op, arg, ...) \ +#define MAKE_ARG_LIST_60(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_59(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_61(op, arg, ...) \ +#define MAKE_ARG_LIST_61(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_60(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_62(op, arg, ...) \ +#define MAKE_ARG_LIST_62(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_61(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_63(op, arg, ...) \ +#define MAKE_ARG_LIST_63(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_62(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_64(op, arg, ...) \ +#define MAKE_ARG_LIST_64(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_63(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_65(op, arg, ...) \ +#define MAKE_ARG_LIST_65(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_64(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_66(op, arg, ...) \ +#define MAKE_ARG_LIST_66(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_65(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_67(op, arg, ...) \ +#define MAKE_ARG_LIST_67(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_66(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_68(op, arg, ...) \ +#define MAKE_ARG_LIST_68(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_67(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_69(op, arg, ...) \ +#define MAKE_ARG_LIST_69(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_68(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_70(op, arg, ...) \ +#define MAKE_ARG_LIST_70(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_69(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_71(op, arg, ...) \ +#define MAKE_ARG_LIST_71(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_70(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_72(op, arg, ...) \ +#define MAKE_ARG_LIST_72(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_71(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_73(op, arg, ...) \ +#define MAKE_ARG_LIST_73(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_72(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_74(op, arg, ...) \ +#define MAKE_ARG_LIST_74(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_73(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_75(op, arg, ...) \ +#define MAKE_ARG_LIST_75(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_74(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_76(op, arg, ...) \ +#define MAKE_ARG_LIST_76(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_75(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_77(op, arg, ...) \ +#define MAKE_ARG_LIST_77(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_76(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_78(op, arg, ...) \ +#define MAKE_ARG_LIST_78(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_77(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_79(op, arg, ...) \ +#define MAKE_ARG_LIST_79(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_78(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_80(op, arg, ...) \ +#define MAKE_ARG_LIST_80(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_79(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_81(op, arg, ...) \ +#define MAKE_ARG_LIST_81(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_80(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_82(op, arg, ...) \ +#define MAKE_ARG_LIST_82(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_81(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_83(op, arg, ...) \ +#define MAKE_ARG_LIST_83(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_82(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_84(op, arg, ...) \ +#define MAKE_ARG_LIST_84(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_83(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_85(op, arg, ...) \ +#define MAKE_ARG_LIST_85(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_84(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_86(op, arg, ...) \ +#define MAKE_ARG_LIST_86(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_85(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_87(op, arg, ...) \ +#define MAKE_ARG_LIST_87(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_86(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_88(op, arg, ...) \ +#define MAKE_ARG_LIST_88(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_87(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_89(op, arg, ...) \ +#define MAKE_ARG_LIST_89(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_88(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_90(op, arg, ...) \ +#define MAKE_ARG_LIST_90(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_89(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_91(op, arg, ...) \ +#define MAKE_ARG_LIST_91(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_90(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_92(op, arg, ...) \ +#define MAKE_ARG_LIST_92(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_91(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_93(op, arg, ...) \ +#define MAKE_ARG_LIST_93(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_92(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_94(op, arg, ...) \ +#define MAKE_ARG_LIST_94(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_93(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_95(op, arg, ...) \ +#define MAKE_ARG_LIST_95(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_94(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_96(op, arg, ...) \ +#define MAKE_ARG_LIST_96(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_95(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_97(op, arg, ...) \ +#define MAKE_ARG_LIST_97(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_96(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_98(op, arg, ...) \ +#define MAKE_ARG_LIST_98(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_97(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_99(op, arg, ...) \ +#define MAKE_ARG_LIST_99(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_98(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_100(op, arg, ...) \ +#define MAKE_ARG_LIST_100(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_99(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_101(op, arg, ...) \ +#define MAKE_ARG_LIST_101(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_100(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_102(op, arg, ...) \ +#define MAKE_ARG_LIST_102(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_101(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_103(op, arg, ...) \ +#define MAKE_ARG_LIST_103(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_102(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_104(op, arg, ...) \ +#define MAKE_ARG_LIST_104(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_103(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_105(op, arg, ...) \ +#define MAKE_ARG_LIST_105(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_104(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_106(op, arg, ...) \ +#define MAKE_ARG_LIST_106(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_105(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_107(op, arg, ...) \ +#define MAKE_ARG_LIST_107(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_106(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_108(op, arg, ...) \ +#define MAKE_ARG_LIST_108(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_107(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_109(op, arg, ...) \ +#define MAKE_ARG_LIST_109(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_108(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_110(op, arg, ...) \ +#define MAKE_ARG_LIST_110(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_109(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_111(op, arg, ...) \ +#define MAKE_ARG_LIST_111(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_110(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_112(op, arg, ...) \ +#define MAKE_ARG_LIST_112(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_111(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_113(op, arg, ...) \ +#define MAKE_ARG_LIST_113(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_112(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_114(op, arg, ...) \ +#define MAKE_ARG_LIST_114(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_113(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_115(op, arg, ...) \ +#define MAKE_ARG_LIST_115(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_114(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_116(op, arg, ...) \ +#define MAKE_ARG_LIST_116(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_115(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_117(op, arg, ...) \ +#define MAKE_ARG_LIST_117(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_116(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_118(op, arg, ...) \ +#define MAKE_ARG_LIST_118(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_117(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_119(op, arg, ...) \ +#define MAKE_ARG_LIST_119(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_118(op, __VA_ARGS__)) -#define MAKE_ARG_LIST_120(op, arg, ...) \ +#define MAKE_ARG_LIST_120(op, arg, ...) \ op(arg), MARCO_EXPAND(MAKE_ARG_LIST_119(op, __VA_ARGS__)) #define ADD_VIEW(str) std::string_view(#str, sizeof(#str) - 1) #define SEPERATOR , #define CON_STR_1(element, ...) ADD_VIEW(element) -#define CON_STR_2(element, ...) \ +#define CON_STR_2(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_1(__VA_ARGS__)) -#define CON_STR_3(element, ...) \ +#define CON_STR_3(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_2(__VA_ARGS__)) -#define CON_STR_4(element, ...) \ +#define CON_STR_4(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_3(__VA_ARGS__)) -#define CON_STR_5(element, ...) \ +#define CON_STR_5(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_4(__VA_ARGS__)) -#define CON_STR_6(element, ...) \ +#define CON_STR_6(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_5(__VA_ARGS__)) -#define CON_STR_7(element, ...) \ +#define CON_STR_7(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_6(__VA_ARGS__)) -#define CON_STR_8(element, ...) \ +#define CON_STR_8(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_7(__VA_ARGS__)) -#define CON_STR_9(element, ...) \ +#define CON_STR_9(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_8(__VA_ARGS__)) -#define CON_STR_10(element, ...) \ +#define CON_STR_10(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_9(__VA_ARGS__)) -#define CON_STR_11(element, ...) \ +#define CON_STR_11(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_10(__VA_ARGS__)) -#define CON_STR_12(element, ...) \ +#define CON_STR_12(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_11(__VA_ARGS__)) -#define CON_STR_13(element, ...) \ +#define CON_STR_13(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_12(__VA_ARGS__)) -#define CON_STR_14(element, ...) \ +#define CON_STR_14(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_13(__VA_ARGS__)) -#define CON_STR_15(element, ...) \ +#define CON_STR_15(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_14(__VA_ARGS__)) -#define CON_STR_16(element, ...) \ +#define CON_STR_16(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_15(__VA_ARGS__)) -#define CON_STR_17(element, ...) \ +#define CON_STR_17(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_16(__VA_ARGS__)) -#define CON_STR_18(element, ...) \ +#define CON_STR_18(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_17(__VA_ARGS__)) -#define CON_STR_19(element, ...) \ +#define CON_STR_19(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_18(__VA_ARGS__)) -#define CON_STR_20(element, ...) \ +#define CON_STR_20(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_19(__VA_ARGS__)) -#define CON_STR_21(element, ...) \ +#define CON_STR_21(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_20(__VA_ARGS__)) -#define CON_STR_22(element, ...) \ +#define CON_STR_22(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_21(__VA_ARGS__)) -#define CON_STR_23(element, ...) \ +#define CON_STR_23(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_22(__VA_ARGS__)) -#define CON_STR_24(element, ...) \ +#define CON_STR_24(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_23(__VA_ARGS__)) -#define CON_STR_25(element, ...) \ +#define CON_STR_25(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_24(__VA_ARGS__)) -#define CON_STR_26(element, ...) \ +#define CON_STR_26(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_25(__VA_ARGS__)) -#define CON_STR_27(element, ...) \ +#define CON_STR_27(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_26(__VA_ARGS__)) -#define CON_STR_28(element, ...) \ +#define CON_STR_28(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_27(__VA_ARGS__)) -#define CON_STR_29(element, ...) \ +#define CON_STR_29(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_28(__VA_ARGS__)) -#define CON_STR_30(element, ...) \ +#define CON_STR_30(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_29(__VA_ARGS__)) -#define CON_STR_31(element, ...) \ +#define CON_STR_31(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_30(__VA_ARGS__)) -#define CON_STR_32(element, ...) \ +#define CON_STR_32(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_31(__VA_ARGS__)) -#define CON_STR_33(element, ...) \ +#define CON_STR_33(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_32(__VA_ARGS__)) -#define CON_STR_34(element, ...) \ +#define CON_STR_34(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_33(__VA_ARGS__)) -#define CON_STR_35(element, ...) \ +#define CON_STR_35(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_34(__VA_ARGS__)) -#define CON_STR_36(element, ...) \ +#define CON_STR_36(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_35(__VA_ARGS__)) -#define CON_STR_37(element, ...) \ +#define CON_STR_37(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_36(__VA_ARGS__)) -#define CON_STR_38(element, ...) \ +#define CON_STR_38(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_37(__VA_ARGS__)) -#define CON_STR_39(element, ...) \ +#define CON_STR_39(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_38(__VA_ARGS__)) -#define CON_STR_40(element, ...) \ +#define CON_STR_40(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_39(__VA_ARGS__)) -#define CON_STR_41(element, ...) \ +#define CON_STR_41(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_40(__VA_ARGS__)) -#define CON_STR_42(element, ...) \ +#define CON_STR_42(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_41(__VA_ARGS__)) -#define CON_STR_43(element, ...) \ +#define CON_STR_43(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_42(__VA_ARGS__)) -#define CON_STR_44(element, ...) \ +#define CON_STR_44(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_43(__VA_ARGS__)) -#define CON_STR_45(element, ...) \ +#define CON_STR_45(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_44(__VA_ARGS__)) -#define CON_STR_46(element, ...) \ +#define CON_STR_46(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_45(__VA_ARGS__)) -#define CON_STR_47(element, ...) \ +#define CON_STR_47(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_46(__VA_ARGS__)) -#define CON_STR_48(element, ...) \ +#define CON_STR_48(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_47(__VA_ARGS__)) -#define CON_STR_49(element, ...) \ +#define CON_STR_49(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_48(__VA_ARGS__)) -#define CON_STR_50(element, ...) \ +#define CON_STR_50(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_49(__VA_ARGS__)) -#define CON_STR_51(element, ...) \ +#define CON_STR_51(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_50(__VA_ARGS__)) -#define CON_STR_52(element, ...) \ +#define CON_STR_52(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_51(__VA_ARGS__)) -#define CON_STR_53(element, ...) \ +#define CON_STR_53(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_52(__VA_ARGS__)) -#define CON_STR_54(element, ...) \ +#define CON_STR_54(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_53(__VA_ARGS__)) -#define CON_STR_55(element, ...) \ +#define CON_STR_55(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_54(__VA_ARGS__)) -#define CON_STR_56(element, ...) \ +#define CON_STR_56(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_55(__VA_ARGS__)) -#define CON_STR_57(element, ...) \ +#define CON_STR_57(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_56(__VA_ARGS__)) -#define CON_STR_58(element, ...) \ +#define CON_STR_58(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_57(__VA_ARGS__)) -#define CON_STR_59(element, ...) \ +#define CON_STR_59(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_58(__VA_ARGS__)) -#define CON_STR_60(element, ...) \ +#define CON_STR_60(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_59(__VA_ARGS__)) -#define CON_STR_61(element, ...) \ +#define CON_STR_61(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_60(__VA_ARGS__)) -#define CON_STR_62(element, ...) \ +#define CON_STR_62(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_61(__VA_ARGS__)) -#define CON_STR_63(element, ...) \ +#define CON_STR_63(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_62(__VA_ARGS__)) -#define CON_STR_64(element, ...) \ +#define CON_STR_64(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_63(__VA_ARGS__)) -#define CON_STR_65(element, ...) \ +#define CON_STR_65(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_64(__VA_ARGS__)) -#define CON_STR_66(element, ...) \ +#define CON_STR_66(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_65(__VA_ARGS__)) -#define CON_STR_67(element, ...) \ +#define CON_STR_67(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_66(__VA_ARGS__)) -#define CON_STR_68(element, ...) \ +#define CON_STR_68(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_67(__VA_ARGS__)) -#define CON_STR_69(element, ...) \ +#define CON_STR_69(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_68(__VA_ARGS__)) -#define CON_STR_70(element, ...) \ +#define CON_STR_70(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_69(__VA_ARGS__)) -#define CON_STR_71(element, ...) \ +#define CON_STR_71(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_70(__VA_ARGS__)) -#define CON_STR_72(element, ...) \ +#define CON_STR_72(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_71(__VA_ARGS__)) -#define CON_STR_73(element, ...) \ +#define CON_STR_73(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_72(__VA_ARGS__)) -#define CON_STR_74(element, ...) \ +#define CON_STR_74(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_73(__VA_ARGS__)) -#define CON_STR_75(element, ...) \ +#define CON_STR_75(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_74(__VA_ARGS__)) -#define CON_STR_76(element, ...) \ +#define CON_STR_76(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_75(__VA_ARGS__)) -#define CON_STR_77(element, ...) \ +#define CON_STR_77(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_76(__VA_ARGS__)) -#define CON_STR_78(element, ...) \ +#define CON_STR_78(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_77(__VA_ARGS__)) -#define CON_STR_79(element, ...) \ +#define CON_STR_79(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_78(__VA_ARGS__)) -#define CON_STR_80(element, ...) \ +#define CON_STR_80(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_79(__VA_ARGS__)) -#define CON_STR_81(element, ...) \ +#define CON_STR_81(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_80(__VA_ARGS__)) -#define CON_STR_82(element, ...) \ +#define CON_STR_82(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_81(__VA_ARGS__)) -#define CON_STR_83(element, ...) \ +#define CON_STR_83(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_82(__VA_ARGS__)) -#define CON_STR_84(element, ...) \ +#define CON_STR_84(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_83(__VA_ARGS__)) -#define CON_STR_85(element, ...) \ +#define CON_STR_85(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_84(__VA_ARGS__)) -#define CON_STR_86(element, ...) \ +#define CON_STR_86(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_85(__VA_ARGS__)) -#define CON_STR_87(element, ...) \ +#define CON_STR_87(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_86(__VA_ARGS__)) -#define CON_STR_88(element, ...) \ +#define CON_STR_88(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_87(__VA_ARGS__)) -#define CON_STR_89(element, ...) \ +#define CON_STR_89(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_88(__VA_ARGS__)) -#define CON_STR_90(element, ...) \ +#define CON_STR_90(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_89(__VA_ARGS__)) -#define CON_STR_91(element, ...) \ +#define CON_STR_91(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_90(__VA_ARGS__)) -#define CON_STR_92(element, ...) \ +#define CON_STR_92(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_91(__VA_ARGS__)) -#define CON_STR_93(element, ...) \ +#define CON_STR_93(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_92(__VA_ARGS__)) -#define CON_STR_94(element, ...) \ +#define CON_STR_94(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_93(__VA_ARGS__)) -#define CON_STR_95(element, ...) \ +#define CON_STR_95(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_94(__VA_ARGS__)) -#define CON_STR_96(element, ...) \ +#define CON_STR_96(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_95(__VA_ARGS__)) -#define CON_STR_97(element, ...) \ +#define CON_STR_97(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_96(__VA_ARGS__)) -#define CON_STR_98(element, ...) \ +#define CON_STR_98(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_97(__VA_ARGS__)) -#define CON_STR_99(element, ...) \ +#define CON_STR_99(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_98(__VA_ARGS__)) -#define CON_STR_100(element, ...) \ +#define CON_STR_100(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_99(__VA_ARGS__)) -#define CON_STR_101(element, ...) \ +#define CON_STR_101(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_100(__VA_ARGS__)) -#define CON_STR_102(element, ...) \ +#define CON_STR_102(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_101(__VA_ARGS__)) -#define CON_STR_103(element, ...) \ +#define CON_STR_103(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_102(__VA_ARGS__)) -#define CON_STR_104(element, ...) \ +#define CON_STR_104(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_103(__VA_ARGS__)) -#define CON_STR_105(element, ...) \ +#define CON_STR_105(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_104(__VA_ARGS__)) -#define CON_STR_106(element, ...) \ +#define CON_STR_106(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_105(__VA_ARGS__)) -#define CON_STR_107(element, ...) \ +#define CON_STR_107(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_106(__VA_ARGS__)) -#define CON_STR_108(element, ...) \ +#define CON_STR_108(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_107(__VA_ARGS__)) -#define CON_STR_109(element, ...) \ +#define CON_STR_109(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_108(__VA_ARGS__)) -#define CON_STR_110(element, ...) \ +#define CON_STR_110(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_109(__VA_ARGS__)) -#define CON_STR_111(element, ...) \ +#define CON_STR_111(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_110(__VA_ARGS__)) -#define CON_STR_112(element, ...) \ +#define CON_STR_112(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_111(__VA_ARGS__)) -#define CON_STR_113(element, ...) \ +#define CON_STR_113(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_112(__VA_ARGS__)) -#define CON_STR_114(element, ...) \ +#define CON_STR_114(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_113(__VA_ARGS__)) -#define CON_STR_115(element, ...) \ +#define CON_STR_115(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_114(__VA_ARGS__)) -#define CON_STR_116(element, ...) \ +#define CON_STR_116(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_115(__VA_ARGS__)) -#define CON_STR_117(element, ...) \ +#define CON_STR_117(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_116(__VA_ARGS__)) -#define CON_STR_118(element, ...) \ +#define CON_STR_118(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_117(__VA_ARGS__)) -#define CON_STR_119(element, ...) \ +#define CON_STR_119(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_118(__VA_ARGS__)) -#define CON_STR_120(element, ...) \ +#define CON_STR_120(element, ...) \ ADD_VIEW(element) SEPERATOR MARCO_EXPAND(CON_STR_119(__VA_ARGS__)) #define RSEQ_N() \ 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, \ @@ -533,7 +533,7 @@ namespace iguana::detail { #define APPLY_VARIADIC_MACRO(macro, ...) MARCO_EXPAND(macro(__VA_ARGS__)) #define ADD_REFERENCE(t) std::reference_wrapper(t) -#define ADD_REFERENCE_CONST(t) \ +#define ADD_REFERENCE_CONST(t) \ std::reference_wrapper>(t) #define FIELD(t) t #define MAKE_NAMES(...) #__VA_ARGS__, @@ -542,56 +542,55 @@ namespace iguana::detail { #define MACRO_CONCAT(A, B) MACRO_CONCAT1(A, B) #define MACRO_CONCAT1(A, B) A##_##B -#define MAKE_ARG_LIST(N, op, arg, ...) \ +#define MAKE_ARG_LIST(N, op, arg, ...) \ MACRO_CONCAT(MAKE_ARG_LIST, N)(op, arg, __VA_ARGS__) #define GET_ARG_COUNT_INNER(...) MARCO_EXPAND(ARG_N(__VA_ARGS__)) #define GET_ARG_COUNT(...) GET_ARG_COUNT_INNER(__VA_ARGS__, RSEQ_N()) -#define MAKE_STR_LIST(...) \ +#define MAKE_STR_LIST(...) \ MACRO_CONCAT(CON_STR, GET_ARG_COUNT(__VA_ARGS__))(__VA_ARGS__) -#define MAKE_META_DATA_IMPL(STRUCT_NAME, ...) \ - [[maybe_unused]] inline static auto iguana_reflect_members( \ - STRUCT_NAME const &) { \ - struct reflect_members { \ - constexpr decltype(auto) static apply_impl() { \ - return std::make_tuple(__VA_ARGS__); \ - } \ - using size_type = \ - std::integral_constant; \ - constexpr static std::string_view name() { return name_##STRUCT_NAME; } \ - constexpr static std::string_view struct_name() { \ - return std::string_view(#STRUCT_NAME, sizeof(#STRUCT_NAME) - 1); \ - } \ - constexpr static std::string_view fields() { \ - return fields_##STRUCT_NAME; \ - } \ - constexpr static size_t value() { return size_type::value; } \ - constexpr static std::array arr() { \ - return arr_##STRUCT_NAME; \ - } \ - }; \ - return reflect_members{}; \ +#define MAKE_META_DATA_IMPL(STRUCT_NAME, ...) \ + [[maybe_unused]] inline static auto iguana_reflect_members( \ + STRUCT_NAME const &) { \ + struct reflect_members { \ + constexpr decltype(auto) static apply_impl() { \ + return std::make_tuple(__VA_ARGS__); \ + } \ + using size_type = \ + std::integral_constant; \ + constexpr static std::string_view name() { return name_##STRUCT_NAME; } \ + constexpr static std::string_view struct_name() { \ + return std::string_view(#STRUCT_NAME, sizeof(#STRUCT_NAME) - 1); \ + } \ + constexpr static std::string_view fields() { \ + return fields_##STRUCT_NAME; \ + } \ + constexpr static size_t value() { return size_type::value; } \ + constexpr static std::array arr() { \ + return arr_##STRUCT_NAME; \ + } \ + }; \ + return reflect_members{}; \ } -#define MAKE_META_DATA(STRUCT_NAME, TABLE_NAME, N, ...) \ - static constexpr inline std::array arr_##STRUCT_NAME = { \ - MARCO_EXPAND(MACRO_CONCAT(CON_STR, N)(__VA_ARGS__))}; \ - static constexpr inline std::string_view fields_##STRUCT_NAME = { \ - MAKE_NAMES(__VA_ARGS__)}; \ - static constexpr inline std::string_view name_##STRUCT_NAME = TABLE_NAME; \ - MAKE_META_DATA_IMPL(STRUCT_NAME, \ +#define MAKE_META_DATA(STRUCT_NAME, TABLE_NAME, N, ...) \ + static constexpr inline std::array arr_##STRUCT_NAME = { \ + MARCO_EXPAND(MACRO_CONCAT(CON_STR, N)(__VA_ARGS__))}; \ + static constexpr inline std::string_view fields_##STRUCT_NAME = { \ + MAKE_NAMES(__VA_ARGS__)}; \ + static constexpr inline std::string_view name_##STRUCT_NAME = TABLE_NAME; \ + MAKE_META_DATA_IMPL(STRUCT_NAME, \ MAKE_ARG_LIST(N, &STRUCT_NAME::FIELD, __VA_ARGS__)) -#define REFLECTION_ALIAS_IMPL(STRUCT_NAME, ALIAS, N, ...) \ +#define REFLECTION_ALIAS_IMPL(STRUCT_NAME, ALIAS, N, ...) \ MAKE_META_DATA_IMPL_ALIAS(STRUCT_NAME, ALIAS, __VA_ARGS__) -#define FLDALIAS(a, b) \ +#define FLDALIAS(a, b) \ std::pair { a, b } -template -constexpr auto get_mem_ptr_tp(Args... pair) { +template constexpr auto get_mem_ptr_tp(Args... pair) { return std::make_tuple(std::get<0>(pair)...); } @@ -601,51 +600,50 @@ constexpr std::array get_alias_arr(Args... pairs) { frozen::string(std::get<1>(pairs))...}; } -#define MAKE_META_DATA_IMPL_ALIAS(STRUCT_NAME, ALIAS, ...) \ - [[maybe_unused]] inline static auto iguana_reflect_members( \ - STRUCT_NAME const &) { \ - struct reflect_members { \ - constexpr decltype(auto) static apply_impl() { \ - return iguana::detail::get_mem_ptr_tp(__VA_ARGS__); \ - } \ - using size_type = std::integral_constant< \ - size_t, std::tuple_size_v>; \ - constexpr static std::string_view name() { return ALIAS; } \ - constexpr static std::string_view struct_name() { \ - return std::string_view(#STRUCT_NAME, sizeof(#STRUCT_NAME) - 1); \ - } \ - constexpr static size_t value() { return size_type::value; } \ - constexpr static std::array arr() { \ - return iguana::detail::get_alias_arr(__VA_ARGS__); \ - } \ - }; \ - return reflect_members{}; \ +#define MAKE_META_DATA_IMPL_ALIAS(STRUCT_NAME, ALIAS, ...) \ + [[maybe_unused]] inline static auto iguana_reflect_members( \ + STRUCT_NAME const &) { \ + struct reflect_members { \ + constexpr decltype(auto) static apply_impl() { \ + return iguana::detail::get_mem_ptr_tp(__VA_ARGS__); \ + } \ + using size_type = std::integral_constant< \ + size_t, std::tuple_size_v>; \ + constexpr static std::string_view name() { return ALIAS; } \ + constexpr static std::string_view struct_name() { \ + return std::string_view(#STRUCT_NAME, sizeof(#STRUCT_NAME) - 1); \ + } \ + constexpr static size_t value() { return size_type::value; } \ + constexpr static std::array arr() { \ + return iguana::detail::get_alias_arr(__VA_ARGS__); \ + } \ + }; \ + return reflect_members{}; \ } -#define MAKE_META_DATA_IMPL_EMPTY(STRUCT_NAME) \ - inline auto iguana_reflect_members(STRUCT_NAME const &) { \ - struct reflect_members { \ - constexpr decltype(auto) static apply_impl() { \ - return std::make_tuple(); \ - } \ - using size_type = std::integral_constant; \ - constexpr static std::string_view name() { \ - return std::string_view(#STRUCT_NAME, sizeof(#STRUCT_NAME) - 1); \ - } \ - constexpr static size_t value() { return size_type::value; } \ - constexpr static std::array arr() { \ - return arr_##STRUCT_NAME; \ - } \ - }; \ - return reflect_members{}; \ +#define MAKE_META_DATA_IMPL_EMPTY(STRUCT_NAME) \ + inline auto iguana_reflect_members(STRUCT_NAME const &) { \ + struct reflect_members { \ + constexpr decltype(auto) static apply_impl() { \ + return std::make_tuple(); \ + } \ + using size_type = std::integral_constant; \ + constexpr static std::string_view name() { \ + return std::string_view(#STRUCT_NAME, sizeof(#STRUCT_NAME) - 1); \ + } \ + constexpr static size_t value() { return size_type::value; } \ + constexpr static std::array arr() { \ + return arr_##STRUCT_NAME; \ + } \ + }; \ + return reflect_members{}; \ } -#define MAKE_META_DATA_EMPTY(STRUCT_NAME) \ - constexpr inline std::array arr_##STRUCT_NAME = {}; \ +#define MAKE_META_DATA_EMPTY(STRUCT_NAME) \ + constexpr inline std::array arr_##STRUCT_NAME = {}; \ MAKE_META_DATA_IMPL_EMPTY(STRUCT_NAME) -template -inline auto get_value_type(std::tuple) { +template inline auto get_value_type(std::tuple) { return std::variant{}; } @@ -658,50 +656,47 @@ inline constexpr frozen::string filter_str(const frozen::string &str) { } template -inline constexpr auto get_iguana_struct_map_impl( - const std::array &arr, T &&t, - std::index_sequence) { +inline constexpr auto +get_iguana_struct_map_impl(const std::array &arr, + T &&t, std::index_sequence) { using ValueType = decltype(get_value_type(t)); return frozen::unordered_map{ {filter_str(arr[Is]), ValueType{std::in_place_index, std::get(t)}}...}; } -} // namespace iguana::detail +} // namespace iguana::detail namespace iguana { -#define REFLECTION_WITH_NAME(STRUCT_NAME, TABLE_NAME, ...) \ - MAKE_META_DATA(STRUCT_NAME, TABLE_NAME, GET_ARG_COUNT(__VA_ARGS__), \ +#define REFLECTION_WITH_NAME(STRUCT_NAME, TABLE_NAME, ...) \ + MAKE_META_DATA(STRUCT_NAME, TABLE_NAME, GET_ARG_COUNT(__VA_ARGS__), \ __VA_ARGS__) -template -inline auto iguana_reflect_type(const T &t); +template inline auto iguana_reflect_type(const T &t); inline std::unordered_map< std::string_view, std::vector>> g_iguana_custom_map; -template -inline constexpr auto get_iguana_struct_map() { +template inline constexpr auto get_iguana_struct_map() { using reflect_members = decltype(iguana_reflect_type(std::declval())); if constexpr (reflect_members::value() == 0) { return std::array{}; - } - else { + } else { return detail::get_iguana_struct_map_impl( reflect_members::arr(), reflect_members::apply_impl(), std::make_index_sequence{}); } } -#define REFLECTION(STRUCT_NAME, ...) \ - MAKE_META_DATA(STRUCT_NAME, #STRUCT_NAME, GET_ARG_COUNT(__VA_ARGS__), \ +#define REFLECTION(STRUCT_NAME, ...) \ + MAKE_META_DATA(STRUCT_NAME, #STRUCT_NAME, GET_ARG_COUNT(__VA_ARGS__), \ __VA_ARGS__) #define REFLECTION_EMPTY(STRUCT_NAME) MAKE_META_DATA_EMPTY(STRUCT_NAME) -#define REFLECTION_ALIAS(STRUCT_NAME, ALIAS, ...) \ - REFLECTION_ALIAS_IMPL( \ - STRUCT_NAME, ALIAS, \ +#define REFLECTION_ALIAS(STRUCT_NAME, ALIAS, ...) \ + REFLECTION_ALIAS_IMPL( \ + STRUCT_NAME, ALIAS, \ std::tuple_size_v, __VA_ARGS__) #ifdef _MSC_VER @@ -709,19 +704,17 @@ inline constexpr auto get_iguana_struct_map() { #else #define IGUANA_UNIQUE_VARIABLE(str) MACRO_CONCAT(str, __LINE__) #endif -template -struct iguana_required_struct; -#define REQUIRED_IMPL(STRUCT_NAME, N, ...) \ - template <> \ - struct iguana::iguana_required_struct { \ - inline static constexpr auto requied_arr() { \ - std::array arr_required = { \ - MARCO_EXPAND(MACRO_CONCAT(CON_STR, N)(__VA_ARGS__))}; \ - return arr_required; \ - } \ +template struct iguana_required_struct; +#define REQUIRED_IMPL(STRUCT_NAME, N, ...) \ + template <> struct iguana::iguana_required_struct { \ + inline static constexpr auto requied_arr() { \ + std::array arr_required = { \ + MARCO_EXPAND(MACRO_CONCAT(CON_STR, N)(__VA_ARGS__))}; \ + return arr_required; \ + } \ }; -#define REQUIRED(STRUCT_NAME, ...) \ +#define REQUIRED(STRUCT_NAME, ...) \ REQUIRED_IMPL(STRUCT_NAME, GET_ARG_COUNT(__VA_ARGS__), __VA_ARGS__) template @@ -773,7 +766,7 @@ inline int add_custom_fields(std::string_view key, inline auto IGUANA_UNIQUE_VARIABLE(STRUCT_NAME) = iguana::add_custom_fields( \ #STRUCT_NAME, {MARCO_EXPAND(MACRO_CONCAT(CON_STR, N)(__VA_ARGS__))}); -#define CUSTOM_FIELDS(STRUCT_NAME, ...) \ +#define CUSTOM_FIELDS(STRUCT_NAME, ...) \ CUSTOM_FIELDS_IMPL(STRUCT_NAME, GET_ARG_COUNT(__VA_ARGS__), __VA_ARGS__) template @@ -812,12 +805,10 @@ template struct is_reflection>> : std::true_type {}; -template -inline auto iguana_reflect_type(const T &t) { +template inline auto iguana_reflect_type(const T &t) { if constexpr (is_public_reflection_v) { return iguana_reflect_members(t); - } - else { + } else { return t.iguana_reflect_members(t); } } @@ -830,8 +821,7 @@ template typename Condition, constexpr int element_index_helper() { if constexpr (index == std::tuple_size_v) { return index; - } - else { + } else { using type_v = decltype(std::declval().* std::declval>()); using item_type = std::decay_t; @@ -849,8 +839,7 @@ constexpr int tuple_element_index() { return element_index_helper<0, Condition, Tuple, T>(); } -template -constexpr decltype(auto) get(T &&t) { +template constexpr decltype(auto) get(T &&t) { using M = decltype(iguana_reflect_type(std::forward(t))); using U = decltype(std::forward(t).*(std::get(M::apply_impl()))); @@ -859,8 +848,7 @@ constexpr decltype(auto) get(T &&t) { std::array arr; memcpy(arr.data(), s, arr.size()); return arr; - } - else + } else return std::forward(t).*(std::get(M::apply_impl())); } @@ -879,38 +867,38 @@ constexpr auto get_impl(T &t, std::index_sequence) { return std::make_tuple(std::ref(get(t))...); } -template -constexpr auto get(T const &t) { +template constexpr auto get(T const &t) { using M = decltype(iguana_reflect_type(t)); return get_impl(t, std::make_index_sequence{}); } -template -constexpr auto get_ref(T &t) { +template constexpr auto get_ref(T &t) { using M = decltype(iguana_reflect_type(t)); return get_impl(t, std::make_index_sequence{}); } -template -constexpr const auto get_name() { +template constexpr const auto get_name() { using M = decltype(iguana_reflect_type(std::declval())); static_assert(I < M::value(), "out of range"); return M::arr()[I]; } -template -constexpr const auto get_name(size_t i) { +template constexpr const auto get_name(size_t i) { using M = decltype(iguana_reflect_type(std::declval())); // static_assert(I -constexpr const std::string_view get_name() { +template constexpr const std::string_view get_name() { using M = decltype(iguana_reflect_type(std::declval())); return M::name(); } +template constexpr const std::string_view get_fields() { + using M = Reflect_members; + return M::fields(); +} + template constexpr std::enable_if_t::value, size_t> get_value() { using M = decltype(iguana_reflect_type(std::declval())); @@ -922,14 +910,12 @@ constexpr std::enable_if_t::value, size_t> get_value() { return 1; } -template -constexpr auto get_array() { +template constexpr auto get_array() { using M = decltype(iguana_reflect_type(std::declval())); return M::arr(); } -template -inline bool has_custom_fields(std::string_view key = "") { +template inline bool has_custom_fields(std::string_view key = "") { if (key.empty()) { return !g_iguana_custom_map.empty(); } @@ -957,14 +943,12 @@ inline std::string_view get_custom_fields(std::string_view origin) { return (*find_it).second; } -template -constexpr auto get_index(std::string_view name) { +template constexpr auto get_index(std::string_view name) { using M = decltype(iguana_reflect_type(std::declval())); constexpr auto arr = M::arr(); - auto it = std::find_if(arr.begin(), arr.end(), [name](auto str) { - return (str == name); - }); + auto it = std::find_if(arr.begin(), arr.end(), + [name](auto str) { return (str == name); }); return std::distance(arr.begin(), it); } @@ -1006,5 +990,5 @@ constexpr std::enable_if_t>::value> for_each(T &&t, for_each(std::forward(t), std::forward(f), std::make_index_sequence{}); } -} // namespace iguana -#endif // IGUANA_REFLECTION_HPP +} // namespace iguana +#endif // IGUANA_REFLECTION_HPP diff --git a/iguana/xml_reader.hpp b/iguana/xml_reader.hpp index 224d2fdd..974c8e7c 100644 --- a/iguana/xml_reader.hpp +++ b/iguana/xml_reader.hpp @@ -428,7 +428,8 @@ IGUANA_INLINE void from_xml(U &value, It &&it, It &&end) { detail::parse_item(value, it, end, key); } -template , int> = 0> +template , int> = 0> IGUANA_INLINE void from_xml(U &value, const View &view) { from_xml(value, std::begin(view), std::end(view)); } diff --git a/iguana/xml_writer.hpp b/iguana/xml_writer.hpp index 2f044cff..7a2d5b56 100644 --- a/iguana/xml_writer.hpp +++ b/iguana/xml_writer.hpp @@ -158,7 +158,7 @@ IGUANA_INLINE void render_xml_value(Stream &ss, T &&t, std::string_view name) { using value_type = underline_type_t; constexpr auto Idx = decltype(i)::value; constexpr auto Count = M::value(); - constexpr std::string_view tag_name = + [[maybe_unused]] constexpr std::string_view tag_name = std::string_view(get_name, Idx>().data(), get_name, Idx>().size()); static_assert(Idx < Count); diff --git a/iguana/yaml_reader.hpp b/iguana/yaml_reader.hpp index 78068668..33c891c7 100644 --- a/iguana/yaml_reader.hpp +++ b/iguana/yaml_reader.hpp @@ -315,7 +315,8 @@ IGUANA_INLINE void parse_item(U &value, It &&it, It &&end, size_t min_spaces) { using value_type = std::decay_t; skip_space_and_lines(it, end, spaces); match<'-'>(it, end); - auto subspaces = skip_space_and_lines(it, end, spaces + 1); + [[maybe_unused]] auto subspaces = + skip_space_and_lines(it, end, spaces + 1); if constexpr (string_v) { parse_item(v, it, end, spaces + 1); } else if constexpr (plain_v) { @@ -336,10 +337,10 @@ IGUANA_INLINE void parse_item(U &value, It &&it, It &&end, size_t min_spaces) { using T = std::remove_reference_t; using key_type = typename T::key_type; using value_type = typename T::mapped_type; - auto spaces = skip_space_and_lines(it, end, min_spaces); + [[maybe_unused]] auto spaces = skip_space_and_lines(it, end, min_spaces); if (*it == '{') { ++it; - auto subspaces = skip_space_and_lines(it, end, min_spaces); + [[maybe_unused]] auto subspaces = skip_space_and_lines(it, end, min_spaces); while (it != end) { if (*it == '}') IGUANA_UNLIKELY { @@ -440,7 +441,7 @@ IGUANA_INLINE void parse_item(U &value, It &&it, It &&end, size_t min_spaces) { template IGUANA_INLINE void skip_object_value(It &&it, It &&end, size_t min_spaces) { - int subspace = min_spaces; + size_t subspace = min_spaces; while (it != end) { while (it != end && *it != '\n') { ++it;