template
struct A
{
A operator%( const T& x);
};
template
A A::operator%( const T& x ) {
Use overloading instead of explicit specialization when you want to refine the behavior for a more specific parameter type. It's easier to use (less surprises) and more powerful
template
struct A
{
A operator%( const T& x) {
return opModIml(x, std::is_floating_point());
}
A opModImpl(T const& x, std::false_type) { /* ... */ }
A opModImpl(T const& x, std::true_type) { /* ... */ }
};
An example that uses SFINAE (enable_if
) as you seem to be curious
template
struct A
{
A operator%( const T& x) {
return opModIml(x);
}
template::value>::type>
A opModImpl(U const& x) { /* ... */ }
template::value>::type>
A opModImpl(U const& x) { /* ... */ }
};
Way more ugly of course. There's no reason to use enable_if
here, I think. It's overkill.