27 #ifndef MLN_TRAIT_SOLVE_HH
28 # define MLN_TRAIT_SOLVE_HH
38 # include <mln/core/category.hh>
39 # include <mln/metal/equal.hh>
40 # include <mln/metal/if.hh>
41 # include <mln/metal/ret.hh>
46 # ifndef MLN_DEBUG_TRAITS
47 # endif // ! MLN_DEBUG_TRAITS
50 # define mln_trait_unary(Name, T) typename mln::trait::solve_unary< Name, T >::ret
51 # define mln_trait_unary_(Name, T) mln::trait::solve_unary< Name, T >::ret
53 # define mln_trait_binary(Name, T1, T2) typename mln::trait::solve_binary< Name, T1, T2 >::ret
54 # define mln_trait_binary_(Name, T1, T2) mln::trait::solve_binary< Name, T1, T2 >::ret
87 template <
template <
class>
class Name,
89 struct set_precise_unary_
95 template <
template <
class>
class Name,
96 template <
class>
class Category_T,
typename T >
99 typedef undefined
ret;
102 template <
template <
class>
class Name,
104 struct set_unary_< Name, Unknown,
T >
106 typedef not_found
ret;
115 template <
template <
class,
class>
class Name,
118 struct set_precise_binary_
120 typedef undefined
ret;
124 template <
template <
class,
class>
class Name,
125 template <
class>
class Category_L,
typename L,
126 template <
class>
class Category_R,
typename R >
129 typedef undefined
ret;
132 template <
template <
class,
class>
class Name,
134 template <
class>
class Category_R,
typename R >
135 struct set_binary_< Name, Unknown, L, Category_R, R >
137 typedef not_found
ret;
140 template <
template <
class,
class>
class Name,
141 template <
class>
class Category_L,
typename L,
143 struct set_binary_< Name, Category_L, L, Unknown, R >
145 typedef not_found
ret;
148 template <
template <
class,
class>
class Name,
151 struct set_binary_< Name, Unknown, L, Unknown, R >
153 typedef not_found
ret;
162 # include <mln/trait/solve_unary.hh>
163 # include <mln/trait/solve_binary.hh>
166 #endif // ! MLN_TRAIT_SOLVE_HH