43 static constexpr size_t size() noexcept
45 return sizeof...(Elements);
53 static_assert(
I <
sizeof...(Elements));
54 return std::tuple_element_t<I, std::tuple<TypeForValue<T, Elements>...>>::value;
60 template<T Element>
static constexpr bool contains()
62 return ((Element == Elements) || ...);
74 static constexpr size_t size() noexcept
82 template<
size_t I>
using at_index = std::tuple_element_t<
I, std::tuple<
T...>>;
87template<
typename T,
T Value,
size_t...
I>
89 std::index_sequence<I...> )
94template<
typename T,
T Value1,
T Value2,
size_t... Value1Indices,
size_t...
I>
96 (
ValueSequence<size_t, Value1Indices...>::template contains<I>() ? Value1 :
99 std::index_sequence<I...> )
109template<
typename T, T Value,
size_t Size>
111 std::make_index_sequence<Size>()));
117template<
typename T,
T Value1,
T Value2,
size_t Size,
size_t... Value1Indices>
123static_assert(std::is_same_v<make_value_sequence<MyEnum, MyEnum::A, 3>,
126 std::is_same_v<make_two_value_sequence<MyEnum, MyEnum::A, MyEnum::B, 5, 1, 2>,
ValueSequence< T,(ValueSequence< size_t, Value1Indices... >::template contains< I >() ? Value1 :Value2)... > make_two_value_sequence_impl(ValueSequence< size_t, Value1Indices... >, std::index_sequence< I... >)
ValueSequence< T,((I==0) ? Value :Value)... > make_value_sequence_impl(std::index_sequence< I... >)
decltype(detail::make_two_value_sequence_impl< T, Value1, Value2 >( ValueSequence< size_t, Value1Indices... >(), std::make_index_sequence< Size >())) make_two_value_sequence
decltype(detail::make_value_sequence_impl< T, Value >( std::make_index_sequence< Size >())) make_value_sequence
std::tuple_element_t< I, std::tuple< T... > > at_index
static constexpr size_t size() noexcept
static constexpr size_t size() noexcept
static constexpr T at_index()
static constexpr bool contains()