@@ -1114,10 +1114,6 @@ namespace sqlite_orm {
11141114
11151115// #include "../functional/cxx_universal.h"
11161116
1117- #ifdef SQLITE_ORM_RELAXED_CONSTEXPR_SUPPORTED
1118- #include <array>
1119- #endif
1120-
11211117namespace sqlite_orm {
11221118 namespace internal {
11231119 /**
@@ -1128,37 +1124,6 @@ namespace sqlite_orm {
11281124 return I;
11291125 }
11301126
1131- #ifdef SQLITE_ORM_RELAXED_CONSTEXPR_SUPPORTED
1132- /**
1133- * Reorder the values of an index_sequence according to the positions from a second sequence.
1134- */
1135- template<size_t... Value, size_t... IdxOfValue>
1136- SQLITE_ORM_CONSTEVAL auto reorder_index_sequence(std::index_sequence<Value...>,
1137- std::index_sequence<IdxOfValue...>) {
1138- constexpr std::array<size_t, sizeof...(Value)> values{Value...};
1139- return std::index_sequence<values[sizeof...(Value) - 1u - IdxOfValue]...>{};
1140- }
1141-
1142- template<size_t Value, size_t IdxOfValue>
1143- SQLITE_ORM_CONSTEVAL std::index_sequence<Value> reorder_index_sequence(std::index_sequence<Value>,
1144- std::index_sequence<IdxOfValue>) {
1145- return {};
1146- }
1147-
1148- inline SQLITE_ORM_CONSTEVAL std::index_sequence<> reorder_index_sequence(std::index_sequence<>,
1149- std::index_sequence<>) {
1150- return {};
1151- }
1152-
1153- /**
1154- * Reverse the values of an index_sequence.
1155- */
1156- template<size_t... Idx>
1157- SQLITE_ORM_CONSTEVAL auto reverse_index_sequence(std::index_sequence<Idx...>) {
1158- return reorder_index_sequence(std::index_sequence<Idx...>{}, std::make_index_sequence<sizeof...(Idx)>{});
1159- }
1160- #endif
1161-
11621127 template<class... Seq>
11631128 struct flatten_idxseq {
11641129 using type = std::index_sequence<>;
@@ -9578,7 +9543,9 @@ namespace sqlite_orm {
95789543 template<bool reversed = false, class Tpl, size_t... Idx, class L>
95799544 void iterate_tuple(const Tpl& tpl, std::index_sequence<Idx...>, L&& lambda) {
95809545 if constexpr(reversed) {
9581- iterate_tuple(tpl, reverse_index_sequence(std::index_sequence<Idx...>{}), std::forward<L>(lambda));
9546+ // nifty fold expression trick: make use of guaranteed right-to-left evaluation order when folding over operator=
9547+ int sink;
9548+ ((lambda(std::get<Idx>(tpl)), sink) = ... = 0);
95829549 } else {
95839550 (lambda(std::get<Idx>(tpl)), ...);
95849551 }
0 commit comments