26 #ifndef MLN_TRAIT_SOLVE_HH
27 # define MLN_TRAIT_SOLVE_HH
37 # include <mln/core/category.hh>
38 # include <mln/metal/equal.hh>
39 # include <mln/metal/if.hh>
40 # include <mln/metal/ret.hh>
45 # ifndef MLN_DEBUG_TRAITS
46 # endif // ! MLN_DEBUG_TRAITS
49 # define mln_trait_unary(Name, T) typename mln::trait::solve_unary< Name, T >::ret
50 # define mln_trait_unary_(Name, T) mln::trait::solve_unary< Name, T >::ret
52 # define mln_trait_binary(Name, T1, T2) typename mln::trait::solve_binary< Name, T1, T2 >::ret
53 # define mln_trait_binary_(Name, T1, T2) mln::trait::solve_binary< Name, T1, T2 >::ret
70 struct multiply_defined {};
77 template <
template <
class>
class Name,
79 struct set_precise_unary_
81 typedef undefined ret;
85 template <
template <
class>
class Name,
86 template <
class>
class Category_T,
typename T >
89 typedef undefined ret;
92 template <
template <
class>
class Name,
94 struct set_unary_< Name, Unknown, T >
96 typedef not_found ret;
105 template <
template <
class,
class>
class Name,
108 struct set_precise_binary_
110 typedef undefined ret;
114 template <
template <
class,
class>
class Name,
115 template <
class>
class Category_L,
typename L,
116 template <
class>
class Category_R,
typename R >
119 typedef undefined ret;
122 template <
template <
class,
class>
class Name,
124 template <
class>
class Category_R,
typename R >
125 struct set_binary_< Name, Unknown, L, Category_R, R >
127 typedef not_found ret;
130 template <
template <
class,
class>
class Name,
131 template <
class>
class Category_L,
typename L,
133 struct set_binary_< Name, Category_L, L, Unknown, R >
135 typedef not_found ret;
138 template <
template <
class,
class>
class Name,
141 struct set_binary_< Name, Unknown, L, Unknown, R >
143 typedef not_found ret;
152 # include <mln/trait/solve_unary.hh>
153 # include <mln/trait/solve_binary.hh>
156 #endif // ! MLN_TRAIT_SOLVE_HH