10 template <
class T,
class... Ts>
13 template <
class T,
class... Ts>
14 struct TypeIndex<T, T, Ts...> : std::integral_constant<std::size_t, 0> {};
16 template <
class T,
class U,
class... Ts>
17 struct TypeIndex<T, U, Ts...> : std::integral_constant<std::size_t, 1 + TypeIndex<T, Ts...>::value> {};
25 template <
class... Is,
class... Ts>
28 static_assert(
sizeof...(Is) ==
sizeof...(Ts),
"IndexedTuple size mismatch");
36 const auto&
get()
const {
40 template <
class... Us>
43 template <
class... Js,
class... Us>
48 other.template get<Js>()...
54 return static_cast<const std::tuple<Ts...
>&>(*this) ==
static_cast<const std::tuple<Ts...
>&>(other);
58 return !(*
this == other);
62 template <
class,
class T>
bool operator==(const IndexedTuple< TypeList< Is... >, TypeList< Ts... >> &other) const
IndexedTuple(Us &&... other)
IndexedTuple< TypeList< Is..., Js... >, TypeList< Ts..., Us... > > concat(const IndexedTuple< TypeList< Js... >, TypeList< Us... >> &other) const
bool operator!=(const IndexedTuple< TypeList< Is... >, TypeList< Ts... >> &other) const
std::unique_ptr< Expression > get(const char *value)