capydi
Loading...
Searching...
No Matches
Rebind.hpp
Go to the documentation of this file.
1#ifndef REBIND_HPP_
2#define REBIND_HPP_
3
5
6namespace capy::meta
7{
8
9namespace typed__
10{
11
12template<
13 typename Type,
14 template<typename...> typename SrcContainer,
15 template<typename...> typename DstContainer
16>
17struct Rebind;
18
19template<
20 template<typename...> typename SrcContainer,
21 template<typename...> typename DstContainer,
22 typename... Types
23>
24struct Rebind<
25 SrcContainer<Types...>,
26 SrcContainer,
27 DstContainer
28>
29{
30 using type = DstContainer<Types...>;
31};
32
33}
34
35namespace valued__
36{
37
38template<
39 typename Type,
40 template<auto...> typename SrcContainer,
41 template<auto...> typename DstContainer
42>
43struct Rebind;
44
45template<
46 template<auto...> typename SrcContainer,
47 template<auto...> typename DstContainer,
48 auto... Values
49>
50struct Rebind<
51 SrcContainer<Values...>,
52 SrcContainer,
53 DstContainer
54>
55{
56 using type = DstContainer<Values...>;
57};
58
59}
60
62{
63
64template<
65 typename Type,
66 template<typename...> typename SrcContainer,
67 template<auto...> typename DstContainer
68>
69struct Rebind;
70
71template<
72 template<typename...> typename SrcContainer,
73 template<auto...> typename DstContainer,
74 typename... Types
75>
76struct Rebind<
77 SrcContainer<Types...>,
78 SrcContainer,
79 DstContainer
80>
81{
82 using type = DstContainer<
83 unwrap_value_unit_v<Types>...
84 >;
85};
86
87}
88
89
91{
92
93template<
94 typename Type,
95 template<auto...> typename SrcContainer,
96 template<typename...> typename DstContainer
97>
98struct Rebind;
99
100template<
101 template<auto...> typename SrcContainer,
102 template<typename...> typename DstContainer,
103 auto... Values
104>
105struct Rebind<
106 SrcContainer<Values...>,
107 SrcContainer,
108 DstContainer
109>
110{
111 using type = DstContainer<ValueUnit<Values>...>;
112};
113
114}
115
116template<
117 typename Type,
118 template<typename...> typename SrcContainer,
119 template<typename...> typename DstContainer
120>
121using rebind_t = typename typed__::Rebind<
122 Type,
123 SrcContainer,
124 DstContainer
125>::type;
126
127template<
128 typename Type,
129 template<auto...> typename SrcContainer,
130 template<auto...> typename DstContainer
131>
133 Type,
134 SrcContainer,
135 DstContainer
136>::type;
137
138template<
139 typename Type,
140 template<typename...> typename SrcContainer,
141 template<auto...> typename DstContainer
142>
144 Type,
145 SrcContainer,
146 DstContainer
147>::type;
148
149template<
150 typename Type,
151 template<auto...> typename SrcContainer,
152 template<typename...> typename DstContainer
153>
155 Type,
156 SrcContainer,
157 DstContainer
158>::type;
159
160}
161
162#endif // !REBIND_HPP_
Compile-time type pack utilities and metaprogramming foundations.
Definition Rebind.hpp:10
Definition Rebind.hpp:62
Definition Rebind.hpp:36
Definition Rebind.hpp:91
Definition Rebind.hpp:7
typename typed__::Rebind< Type, SrcContainer, DstContainer >::type rebind_t
Definition Rebind.hpp:121
typename typed_as_valued__::Rebind< Type, SrcContainer, DstContainer >::type rebind_typed_as_valued_t
Definition Rebind.hpp:143
typename valued__::Rebind< Type, SrcContainer, DstContainer >::type valued_rebind_t
Definition Rebind.hpp:132
typename valued_as_typed__::Rebind< Type, SrcContainer, DstContainer >::type rebind_valued_as_typed_t
Definition Rebind.hpp:154
Definition Rebind.hpp:17
DstContainer< unwrap_value_unit_v< Types >... > type
Definition Rebind.hpp:82
Definition Rebind.hpp:43
DstContainer< ValueUnit< Values >... > type
Definition Rebind.hpp:111