@@ -1114,10 +1114,6 @@ namespace sqlite_orm {
1114
1114
1115
1115
// #include "../functional/cxx_universal.h"
1116
1116
1117
- #ifdef SQLITE_ORM_RELAXED_CONSTEXPR_SUPPORTED
1118
- #include <array>
1119
- #endif
1120
-
1121
1117
namespace sqlite_orm {
1122
1118
namespace internal {
1123
1119
/**
@@ -1128,37 +1124,6 @@ namespace sqlite_orm {
1128
1124
return I;
1129
1125
}
1130
1126
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
-
1162
1127
template<class... Seq>
1163
1128
struct flatten_idxseq {
1164
1129
using type = std::index_sequence<>;
@@ -9578,7 +9543,9 @@ namespace sqlite_orm {
9578
9543
template<bool reversed = false, class Tpl, size_t... Idx, class L>
9579
9544
void iterate_tuple(const Tpl& tpl, std::index_sequence<Idx...>, L&& lambda) {
9580
9545
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);
9582
9549
} else {
9583
9550
(lambda(std::get<Idx>(tpl)), ...);
9584
9551
}
0 commit comments