From b6711fd68cb1f22275452adc94cd789f7fa550ab Mon Sep 17 00:00:00 2001 From: Christian Parpart Date: Tue, 21 Jan 2025 22:39:37 +0100 Subject: [PATCH 1/2] code cleanups and compiler warning fixes Signed-off-by: Christian Parpart --- include/reflection-cpp/reflection.hpp | 10 ++++---- test-reflection-cpp.cpp | 34 ++++++++++++++------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/include/reflection-cpp/reflection.hpp b/include/reflection-cpp/reflection.hpp index c33551c..ee10f4f 100644 --- a/include/reflection-cpp/reflection.hpp +++ b/include/reflection-cpp/reflection.hpp @@ -77,7 +77,7 @@ namespace detail }; template - inline constexpr std::string_view join() + constexpr std::string_view join() { constexpr auto joined_arr = []() { constexpr size_t len = (Strs.size() + ... + 0); @@ -178,14 +178,14 @@ elisp functions to fill the ToTuple function template > requires(N <= MaxReflectionMemerCount) -inline constexpr decltype(auto) ToTuple(T&& t) noexcept +constexpr decltype(auto) ToTuple(T&& t) noexcept { if constexpr (N == 0) return std::tuple {}; // clang-format off else if constexpr (N == 1) { - auto& [p0] = t; + auto& [p0] = std::forward(t); // TODO: We need to fix the gen script and apply that to all the cases below return std::tie(p0); } else if constexpr (N == 2) @@ -795,7 +795,7 @@ std::string Inspect(std::vector const& objects) } template -void CollectDifferences(const Object& lhs, const Object& rhs, Callback&& callback) +void CollectDifferences(const Object& lhs, const Object& rhs, Callback const& callback) { template_for<0, CountMembers>([&]() { if constexpr (std::equality_comparable>) @@ -814,7 +814,7 @@ void CollectDifferences(const Object& lhs, const Object& rhs, Callback&& callbac template requires std::same_as, MemberTypeOf<0, Object>>> -void CollectDifferences(const Object& lhs, const Object& rhs, Callback&& callback) +void CollectDifferences(const Object& lhs, const Object& rhs, Callback const& callback) { template_for<0, CountMembers>([&]() { if constexpr (std::equality_comparable>) diff --git a/test-reflection-cpp.cpp b/test-reflection-cpp.cpp index 99437ef..10d187b 100644 --- a/test-reflection-cpp.cpp +++ b/test-reflection-cpp.cpp @@ -3,7 +3,6 @@ #include -#include #include #include @@ -23,7 +22,7 @@ struct TestStruct Person e; }; -enum Color +enum Color : std::uint8_t { Red, Green, @@ -71,7 +70,7 @@ TEST_CASE("core", "[reflection]") auto s = SingleValueRecord { 42 }; CHECK(Reflection::Inspect(s) == "value=42"); - auto p = Person { "John Doe", "john@doe.com", 42 }; + auto p = Person { .name = "John Doe", .email = "john@doe.com", .age = 42 }; auto const result = Reflection::Inspect(p); CHECK(result == R"(name="John Doe" email="john@doe.com" age=42)"); } @@ -89,14 +88,20 @@ name="John Doe" email="john@doe.com" age=43 TEST_CASE("nested", "[reflection]") { - auto ts = TestStruct { 1, 2.0f, 3.0, "hello", { "John Doe", "john@doe.com", 42 } }; + auto ts = TestStruct { + .a = 1, + .b = 2.0f, + .c = 3.0, + .d = "hello", + .e = { .name = "John Doe", .email = "john@doe.com", .age = 42 }, + }; auto const result = Reflection::Inspect(ts); CHECK(result == R"(a=1 b=2 c=3 d="hello" e={name="John Doe" email="john@doe.com" age=42})"); } TEST_CASE("EnumerateMembers.index_and_value", "[reflection]") { - auto ps = Person { "John Doe", "john@doe.com", 42 }; + auto ps = Person { .name = "John Doe", .email = "john@doe.com", .age = 42 }; Reflection::EnumerateMembers(ps, [](auto&& value) { if constexpr (I == 0) { @@ -118,22 +123,22 @@ TEST_CASE("EnumerateMembers.index_and_type", "[reflection]") Reflection::EnumerateMembers([]() { if constexpr (I == 0) { - static_assert(std::same_as); + static_assert(std::same_as); } if constexpr (I == 1) { - static_assert(std::same_as); + static_assert(std::same_as); } if constexpr (I == 2) { - static_assert(std::same_as); + static_assert(std::same_as); } }); } TEST_CASE("CallOnMembers", "[reflection]") { - auto ps = Person { "John Doe", "john@doe.com", 42 }; + auto ps = Person { .name = "John Doe", .email = "john@doe.com", .age = 42 }; std::string result; Reflection::CallOnMembers(ps, [&result](auto&& name, auto&& value) { result += name; @@ -163,7 +168,7 @@ struct S TEST_CASE("FoldMembers.value", "[reflection]") { - auto const s = S { 1, 2, 3 }; + auto const s = S { .a = 1, .b = 2, .c = 3 }; auto const result = Reflection::FoldMembers( s, 0, [](auto&& /*name*/, auto&& memberValue, auto&& accum) { return accum + memberValue; }); @@ -203,23 +208,20 @@ TEST_CASE("Compare.simple", "[reflection]") CHECK(diff == "id: 1 != 2\nname: John Doe != Jane Doe\nage: 42 != 43\n"); } - - TEST_CASE("Compare.simple_with_indexing", "[reflection]") { auto const r1 = Record { .id = 1, .name = "John Doe", .age = 42 }; auto const r2 = Record { .id = 2, .name = "John Doe", .age = 42 }; - size_t check = -1; - auto differenceCallback = [&](size_t ind, auto const& lhs, auto const& rhs) { - check = ind; + auto check = static_cast(-1); + auto differenceCallback = [&](size_t index, auto const& /*lhs*/, auto const& /*rhs*/) { + check = index; }; Reflection::CollectDifferences(r1, r2, differenceCallback); CHECK(check == 0); } - struct Table { Record first; From 5445b164d25b30941d9523cd183d07f3c27cdfa3 Mon Sep 17 00:00:00 2001 From: Yaraslau Tamashevich Date: Tue, 21 Jan 2025 22:52:48 +0100 Subject: [PATCH 2/2] Updated ToTuple function --- include/reflection-cpp/reflection.hpp | 105 +++++++++++++------------- 1 file changed, 53 insertions(+), 52 deletions(-) diff --git a/include/reflection-cpp/reflection.hpp b/include/reflection-cpp/reflection.hpp index ee10f4f..2b33dd8 100644 --- a/include/reflection-cpp/reflection.hpp +++ b/include/reflection-cpp/reflection.hpp @@ -159,7 +159,7 @@ elisp functions to fill the ToTuple function (setq params (create_params n)) (concat " else if constexpr (N == " (number-to-string n) ")\n" " {\n" - " auto& [" params "] = t;\n" + " auto&& [" params "] = std::forward(t);\n" " return std::tie(" params ");\n" " }\n" ) @@ -185,252 +185,252 @@ constexpr decltype(auto) ToTuple(T&& t) noexcept // clang-format off else if constexpr (N == 1) { - auto& [p0] = std::forward(t); // TODO: We need to fix the gen script and apply that to all the cases below + auto&& [p0] = std::forward(t); return std::tie(p0); } else if constexpr (N == 2) { - auto& [p0, p1] = t; + auto&& [p0, p1] = std::forward(t); return std::tie(p0, p1); } else if constexpr (N == 3) { - auto& [p0, p1, p2] = t; + auto&& [p0, p1, p2] = std::forward(t); return std::tie(p0, p1, p2); } else if constexpr (N == 4) { - auto& [p0, p1, p2, p3] = t; + auto&& [p0, p1, p2, p3] = std::forward(t); return std::tie(p0, p1, p2, p3); } else if constexpr (N == 5) { - auto& [p0, p1, p2, p3, p4] = t; + auto&& [p0, p1, p2, p3, p4] = std::forward(t); return std::tie(p0, p1, p2, p3, p4); } else if constexpr (N == 6) { - auto& [p0, p1, p2, p3, p4, p5] = t; + auto&& [p0, p1, p2, p3, p4, p5] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5); } else if constexpr (N == 7) { - auto& [p0, p1, p2, p3, p4, p5, p6] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6); } else if constexpr (N == 8) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7); } else if constexpr (N == 9) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8); } else if constexpr (N == 10) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); } else if constexpr (N == 11) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); } else if constexpr (N == 12) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); } else if constexpr (N == 13) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); } else if constexpr (N == 14) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); } else if constexpr (N == 15) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14); } else if constexpr (N == 16) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15); } else if constexpr (N == 17) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16); } else if constexpr (N == 18) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17); } else if constexpr (N == 19) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18); } else if constexpr (N == 20) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19); } else if constexpr (N == 21) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20); } else if constexpr (N == 22) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21); } else if constexpr (N == 23) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22); } else if constexpr (N == 24) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23); } else if constexpr (N == 25) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24); } else if constexpr (N == 26) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25); } else if constexpr (N == 27) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26); } else if constexpr (N == 28) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27); } else if constexpr (N == 29) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28); } else if constexpr (N == 30) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29); } else if constexpr (N == 31) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30); } else if constexpr (N == 32) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31); } else if constexpr (N == 33) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32); } else if constexpr (N == 34) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33); } else if constexpr (N == 35) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34); } else if constexpr (N == 36) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35); } else if constexpr (N == 37) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36); } else if constexpr (N == 38) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37); } else if constexpr (N == 39) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38); } else if constexpr (N == 40) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39); } else if constexpr (N == 41) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40); } else if constexpr (N == 42) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41); } else if constexpr (N == 43) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42); } else if constexpr (N == 44) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43); } else if constexpr (N == 45) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44); } else if constexpr (N == 46) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45); } else if constexpr (N == 47) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46); } else if constexpr (N == 48) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46, p47] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46, p47] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46, p47); } else if constexpr (N == 49) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46, p47, p48] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46, p47, p48] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46, p47, p48); } else if constexpr (N == 50) { - auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46, p47, p48, p49] = t; + auto&& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46, p47, p48, p49] = std::forward(t); return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46, p47, p48, p49); } // clang-format on @@ -813,7 +813,8 @@ void CollectDifferences(const Object& lhs, const Object& rhs, Callback const& ca } template -requires std::same_as, MemberTypeOf<0, Object>>> + requires std::same_as, MemberTypeOf<0, Object>>> void CollectDifferences(const Object& lhs, const Object& rhs, Callback const& callback) { template_for<0, CountMembers>([&]() {