Как указано в других ответах, вы не вызываете специализацию std :: string, так как у вас нет std::string
, у вас есть const char []
.
Лучшее решение - это убедитесь, что шаблонный метод не заменит специализацию. Начиная с C ++ 17 я буду использовать if constexpr
, в C ++ 11 и C ++ 14 я буду использовать std::enable_if
. (Обратите внимание, что я использую string_view для предотвращения выделения памяти.)
template <typename T>
bool isGreater(T x1, T x2)
{
if constexpr (std::is_convertable_v<T, std::string_view>)
std::string_view{x1}.compare(x2);
else
return (x1 > x2);
}
Старые стандарты:
template <typename T, typename = std::enable_if<!std::is_convertable<T, std::string>::value>::type>
bool isGreater(T x1, T x2)
{
return (x1 > x2);
}
bool isGreater(string x1, string x2)
{
return (x1.compare(x2));
}