26 #ifndef MLN_TRAIT_NEXT_SOLVE_HH
27 # define MLN_TRAIT_NEXT_SOLVE_HH
33 # include <mln/core/category.hh>
34 # include <mln/metal/equal.hh>
35 # include <mln/metal/if.hh>
36 # include <mln/metal/ret.hh>
37 # include <mln/trait/solve.hh>
42 # ifndef MLN_DEBUG_TRAITS
43 # endif // ! MLN_DEBUG_TRAITS
46 # define mln_trait_nunary(Name, T) typename mln::trait::next::solve_unary< Name, T >::ret
47 # define mln_trait_nunary_(Name, T) mln::trait::next::solve_unary< Name, T >::ret
49 # define mln_trait_nbinary(Name, T1, T2) typename mln::trait::next::solve_binary< Name, T1, T2 >::ret
50 # define mln_trait_nbinary_(Name, T1, T2) mln::trait::next::solve_binary< Name, T1, T2 >::ret
66 template <
typename Name,
68 struct set_precise_unary_
70 typedef undefined
ret;
74 template <
typename Name,
75 template <
class>
class Category_T,
typename T >
78 typedef undefined
ret;
81 template <
typename Name,
83 struct set_unary_< Name, Unknown,
T >
85 typedef not_found
ret;
94 template <
typename Name,
97 struct set_precise_binary_
99 typedef undefined
ret;
103 template <
typename Name,
104 template <
class>
class Category_L,
typename L,
105 template <
class>
class Category_R,
typename R >
108 typedef undefined
ret;
111 template <
typename Name,
113 template <
class>
class Category_R,
typename R >
114 struct set_binary_< Name, Unknown, L, Category_R, R >
116 typedef not_found
ret;
119 template <
typename Name,
120 template <
class>
class Category_L,
typename L,
122 struct set_binary_< Name, Category_L, L, Unknown, R >
124 typedef not_found
ret;
127 template <
typename Name,
130 struct set_binary_< Name, Unknown, L, Unknown, R >
132 typedef not_found
ret;
142 # include <mln/trait/next/solve_unary.hh>
143 # include <mln/trait/next/solve_binary.hh>
144 # include <mln/trait/next/solve_proxy.hh>
146 #endif // ! MLN_TRAIT_NEXT_SOLVE_HH