I currently have a function:
template
bool func(T &t, int x)
{
// do stuff...
}
However I would like to have thr
Turn out the comment about overload into answer:
// For enum
template<typename T>
typename std::enable_if<std::is_enum<T>::value, bool>::type
func(T& t, int x);
// for unsigned char
bool func(unsigned char& t, int x);
// for other
template<typename T>
typename std::enable_if<!std::is_enum<T>::value, bool>::type
func(T& t, int x);
Live example
An alternative is to use specialization for unsigned char
:
// for other
template<typename T>
typename std::enable_if<!std::is_enum<T>::value, bool>::type
func(T& t, int x);
// specialization for unsigned char
template <>
bool func(unsigned char& t, int x);
Live example
Use tag dispatching:
namespace details {
template<class T>
bool func( T& t, int x, std::true_type /* is_enum */, std::false_type ) {
}
template<class T>
bool func( T& t, int x, std::false_type, std::true_type /* unsigned char */ ) {
}
template<class T>
bool func( T& t, int x, std::false_type, std::false_type ) {
// neither
}
}
template<class T>
bool func( T& t, int x ) {
return details::func( t, x, std::is_enum<T>{}, std::is_same<unsigned char, T>{} );
}