-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathP549.Typelist.cpp
49 lines (37 loc) · 982 Bytes
/
P549.Typelist.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <type_traits>
template<typename... Elements>
struct Typelist {};
// extract first element
template<typename List>
struct Front;
template<typename Head, typename... Tail>
struct Front<Typelist<Head, Tail...>>
{
using type = Head;
};
template<typename T>
using Front_t = typename Front<T>::type;
// pop first element, get the rest typelist
template<typename List>
struct Back;
template<typename Head, typename... Tail>
struct Back<Typelist<Head, Tail...>>
{
using type = Typelist<Tail...>;
};
template<typename T>
using Back_t = typename Back<T>::type;
// push element to typelist
template<typename NewElement, typename List>
struct Cons;
template<typename NewElement, typename... Elements>
struct Cons<NewElement, Typelist<Elements...>>
{
using type = Typelist<NewElement, Elements...>;
};
template<typename NewElement, typename List>
using Cons_t = typename Cons<NewElement, List>::type;
int main(int argc, char const *argv[])
{
return 0;
}