@@ -19,48 +19,48 @@ namespace stdsharp::details
19
19
template <typename Seq>
20
20
using type_seq_converter_t = type_seq_converter<Seq>::type;
21
21
22
- template <typename Base, typename ... Types>
23
- struct STDSHARP_EBO type_sequence : private Base, regular_type_sequence<Types...>
22
+ template <typename ... Types>
23
+ struct type_sequence
24
24
{
25
- using Base::adjacent_find;
26
- using Base::all_of;
27
- using Base::any_of;
28
- using Base::contains;
29
- using Base::count;
30
- using Base::count_if;
31
- using Base::count_if_not;
32
- using Base::find;
33
- using Base::find_if;
34
- using Base::find_if_not;
35
- using Base::for_each;
36
- using Base::for_each_n;
37
- using Base::none_of;
38
- using Base::size;
25
+ private:
26
+ using value_sequence = value_sequence<basic_type_constant<Types>{}...>;
39
27
40
- template < template < typename ...> typename T>
41
- using apply_t = T<Types ...>;
28
+ public:
29
+ static constexpr std:: size_t size () noexcept { return sizeof ...(Types); }
42
30
43
31
template <std::size_t I>
44
- using type = Base::template value_type<I>::type;
45
-
46
- template <std::size_t ... I>
47
- using at_t = regular_type_sequence<type<I>...>;
48
-
49
- template <std::size_t Size>
50
- using back_t = type_seq_converter_t <typename Base::template back_t <Size>>;
32
+ using type = type_at<I, Types...>;
51
33
52
- template <std:: size_t Size >
53
- using front_t = type_seq_converter_t < typename Base:: template front_t <Size> >;
34
+ template <template < typename ...> typename T >
35
+ using apply_t = T<Types... >;
54
36
55
37
template <typename ... Others>
56
38
using append_t = regular_type_sequence<Types..., Others...>;
57
39
40
+ template <auto ... Func>
41
+ using transform_fn = value_sequence::template transform_fn<Func...>;
42
+
43
+ template <auto ... Func>
44
+ static constexpr transform_fn<Func...> transform{};
45
+
46
+ template <auto ... Func>
47
+ requires std::invocable<transform_fn<Func...>>
48
+ using transform_t = decltype (transform<Func...>());
49
+
58
50
template <typename T = void >
59
- using invoke_fn = Base ::template invoke_fn<T>;
51
+ using invoke_fn = value_sequence ::template invoke_fn<T>;
60
52
61
- template <typename T = empty_t >
53
+ template <typename T = void >
62
54
static constexpr invoke_fn<T> invoke{};
63
55
56
+ using for_each_fn = value_sequence::for_each_fn;
57
+
58
+ static constexpr for_each_fn for_each{};
59
+
60
+ template <std::size_t From, std::size_t Size>
61
+ using select_range_t =
62
+ type_seq_converter_t <typename value_sequence::template select_range_t <From, Size>>;
63
+
64
64
template <typename ... Others>
65
65
using append_front_t = regular_type_sequence<Others..., Types...>;
66
66
@@ -75,14 +75,6 @@ namespace stdsharp::details
75
75
using replace_t = type_seq_converter_t <
76
76
typename Base::template replace_t <Index, basic_type_constant<Other>{}>>;
77
77
78
- template <std::size_t From, std::size_t Size>
79
- using select_range_t =
80
- type_seq_converter_t <typename Base::template select_range_t <From, Size>>;
81
-
82
- using reverse_t = details::type_seq_converter_t <typename Base::reverse_t >;
83
-
84
- template <typename Cmp>
85
- using unique_t = details::type_seq_converter_t <typename Base::template unique_t <Cmp>>;
86
78
};
87
79
}
88
80
0 commit comments