|
Boost : |
From: John Moeller (fishcorn_at_[hidden])
Date: 2008-05-14 22:04:27
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
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk