
Bruno Lalande <bruno.lalande <at> gmail.com> writes:
Hi,
Line 54: return (N%2) ? base*positive_power<N-1>::result(base)
in positive_power causes positive_power to be instantiated with all the integers from N down to 0.
Yep you're right. At that moment I was a bit disturbed by this runtime evaluation but I didn't think precisely about this issue so I left it like that.
Adding a second integral template argument receiving N%2 to specialize on it works (see attachment) but I feel there's a more elegant solution. Maybe using enable_if?
What about: template <int N> struct positive_power { template <typename T> static typename tools::promote_args<T>::type result(T base) { return ((N%2) ? base : 1) * positive_power<2>::result( positive_power<N/2>::result(base) ); } }; John Moeller