Конечно:
template<typename T, std::size_t N>
typename std::enable_if<!std::is_same<T, char>::value, std::ostream&>::type
operator<<(std::ostream& os, const T (&arr)[N])
{
// ...
}
Это отключит вашу перегрузку, когда T
равно char
с использованием SFINAE .
Для C ++ 03, Boost имеет enable_if
и is_same
.Или просто бросьте свой собственный:
template<class T, class U> struct is_same {
enum { value = false };
};
template<class T> struct is_same<T, T> {
enum { value = true };
};
template<bool, class T> struct enable_if {};
template<class T> struct enable_if<true, T> {
typedef T type;
};