A workaround for partial specialization of function template?
Consider the following metafunction for an integral pow (it is just an example) : class Meta { template<int N, typename T> static constexpr T ipow(T x) { return (N > 0) ? (x*ipow<N-1>(x)) : ((N < 0) ? (static_cast<T>(1)/ipow<N>(x)) : (1)) } }; How to write the stop condition for such a function ? Anytime you ask yourself "how to simulate partial specialization for functions", you can think "overload, and let partial ordering decide what overload is more specialized". template<int N> using int_ = std::integral_constant<int, N>; class Meta { template<int N, typename T> static constexpr T ipow(T