26 #ifndef MLN_METAL_MATH_POW_HH
27 # define MLN_METAL_MATH_POW_HH
34 # include <mln/metal/bool.hh>
35 # include <mln/metal/int.hh>
38 # define mlc_pow(X, N) typename mln::metal::math::pow< X, N >::ret
39 # define mlc_pow_int(x, n) mln::metal::math::pow_int< x, n >::value
57 template <
int x,
int n>
60 enum res_ {
value = x * pow_int_<x, n-1>::value };
64 struct pow_int_< x, 0 >
66 enum res_ {
value = 1 };
70 struct pow_int_< 0, 0 >;
75 template <
int x,
int n,
bool b>
76 struct pow_int_if_ : pow_int_<x, n>
80 template <
int x,
int n>
81 struct pow_int_if_< x, n, false >
87 template <
int x,
int n>
88 struct pow_int : impl::pow_int_if_< x, n,
89 (n >= 0 && ! (x == 0 && n == 0)) >
96 template <
typename X,
typename N>
99 template <
int x,
int n>
100 struct pow< int_<x>, int_<n> >
102 typedef int_< pow_int<x, n>::value > ret;
113 #endif // ! MLN_METAL_MATH_POW_HH