capydi
Loading...
Searching...
No Matches
FixTemplateMetaArity.hpp
Go to the documentation of this file.
1#ifndef DEUNIFY_TEMPLATE_HPP_
2#define DEUNIFY_TEMPLATE_HPP_
3
5
7{
8
9template<
10 MetaArity ARITY,
11 template<typename...> typename Template
12>
14
15template<
16 MetaArity ARITY,
17 template<typename...> typename Template
18>
20
21}
22
23#define PACK(...) __VA_ARGS__
24
25#define DEUNIFY_TEMPLATE(MetaArity, TemplateType, ExpandedArgs) \
26 template< \
27 template<typename...> typename Template \
28 > \
29 struct FixTemplateArityTyped<MetaArity, Template> \
30 { \
31 TemplateType \
32 struct Functor \
33 { \
34 using type = typename Template<ExpandedArgs>::type; \
35 }; \
36 }; \
37 \
38 template< \
39 template<typename...> typename Template \
40 > \
41 struct FixTemplateArityValued<MetaArity, Template> \
42 { \
43 TemplateType \
44 struct Functor \
45 { \
46 static constexpr auto value \
47 = Template<ExpandedArgs>::value; \
48 }; \
49 }
50
51
52namespace capy::meta
53{
54
55namespace implementation_details_
56{
57
58DEUNIFY_TEMPLATE(MetaArity::N1, PACK(template<class T>), PACK(T));
59DEUNIFY_TEMPLATE(MetaArity::N2, PACK(template<class T1, class T2>), PACK(T1, T2));
60DEUNIFY_TEMPLATE(MetaArity::N3, PACK(template<class T1, class T2, class T3>), PACK(T1, T2, T3));
61DEUNIFY_TEMPLATE(MetaArity::N4, PACK(template<class T1, class T2, class T3, class T4>), PACK(T1, T2, T3, T4));
62DEUNIFY_TEMPLATE(MetaArity::N5, PACK(template<class T1, class T2, class T3, class T4, class T5>), PACK(T1, T2, T3, T4, T5));
63DEUNIFY_TEMPLATE(MetaArity::N6, PACK(template<class T1, class T2, class T3, class T4, class T5, class T6>), PACK(T1, T2, T3, T4, T5, T6));
64DEUNIFY_TEMPLATE(MetaArity::N7, PACK(template<class T1, class T2, class T3, class T4, class T5, class T6, class T7>), PACK(T1, T2, T3, T4, T5, T6, T7));
65DEUNIFY_TEMPLATE(MetaArity::N8, PACK(template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8>), PACK(T1, T2, T3, T4, T5, T6, T8));
66DEUNIFY_TEMPLATE(MetaArity::N9, PACK(template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9>), PACK(T1, T2, T3, T4, T5, T6, T8, T9));
67DEUNIFY_TEMPLATE(MetaArity::N10, PACK(template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10>), PACK(T1, T2, T3, T4, T5, T6, T8, T9, T10));
68DEUNIFY_TEMPLATE(MetaArity::N11, PACK(template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11>), PACK(T1, T2, T3, T4, T5, T6, T8, T9, T10, T11));
69DEUNIFY_TEMPLATE(MetaArity::N12, PACK(template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12>), PACK(T1, T2, T3, T4, T5, T6, T8, T9, T10, T11, T12));
70DEUNIFY_TEMPLATE(MetaArity::N13, PACK(template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13>), PACK(T1, T2, T3, T4, T5, T6, T8, T9, T10, T11, T12, T13));
71DEUNIFY_TEMPLATE(MetaArity::N14, PACK(template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14>), PACK(T1, T2, T3, T4, T5, T6, T8, T9, T10, T11, T12, T13, T14));
72DEUNIFY_TEMPLATE(MetaArity::N15, PACK(template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15>), PACK(T1, T2, T3, T4, T5, T6, T8, T9, T10, T11, T12, T13, T14, T15));
73DEUNIFY_TEMPLATE(MetaArity::N16, PACK(template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15, class T16>), PACK(T1, T2, T3, T4, T5, T6, T8, T9, T10, T11, T12, T13, T14, T15, T16));
74
75}
76
77template<
78 MetaArity ARITY,
79 template<typename...> typename Template
80>
82
83template<
84 MetaArity ARITY,
85 template<typename...> typename Template
86>
88
89}
90
91#undef PACK
92#undef DEUNIFY_TEMPLATE
93
94#endif
#define DEUNIFY_TEMPLATE(MetaArity, TemplateType, ExpandedArgs)
Definition FixTemplateMetaArity.hpp:25
#define PACK(...)
Definition FixTemplateMetaArity.hpp:23
Definition Rebind.hpp:7
typename implementation_details_::FixTemplateArityValued< ARITY, Template > fix_template_arity_fv
Definition FixTemplateMetaArity.hpp:87
typename implementation_details_::FixTemplateArityTyped< ARITY, Template > fix_template_arity_ft
Definition FixTemplateMetaArity.hpp:81
MetaArity
Definition MetaArity.hpp:11
@ N10
Definition MetaArity.hpp:21
@ N6
Definition MetaArity.hpp:17
@ N16
Definition MetaArity.hpp:27
@ N15
Definition MetaArity.hpp:26
@ N8
Definition MetaArity.hpp:19
@ N14
Definition MetaArity.hpp:25
@ N1
Definition MetaArity.hpp:12
@ N11
Definition MetaArity.hpp:22
@ N3
Definition MetaArity.hpp:14
@ N4
Definition MetaArity.hpp:15
@ N5
Definition MetaArity.hpp:16
@ N7
Definition MetaArity.hpp:18
@ N2
Definition MetaArity.hpp:13
@ N13
Definition MetaArity.hpp:24
@ N12
Definition MetaArity.hpp:23
@ N9
Definition MetaArity.hpp:20