Я пытаюсь выбрать между двумя шаблонами, основанными на том, существует ли перегрузка operator<<(std::ostream&, const T&)
.
Пример:
template <typename T, typename std::enable_if</* ? */, int>::type = 0>
std::string stringify(const T& t)
{
std::stringstream ss;
ss << t;
return ss.str();
}
template <typename T, typename std::enable_if</* ? */, int>::type = 0>
std::string stringify(const T& t)
{
return "No overload of operator<<";
}
struct Foo { };
int main()
{
std::cout << stringify(11) << std::endl;
std::cout << stringify(Foo{}) << std::endl;
}
Возможно ли это? И если да, как бы вы решили эту проблему?