Предположим, у меня есть шаблон функции, в котором параметр типа используется только как возвращаемый тип:
template <typename T>
T foo()
{
return whatever;
}
Тогда каков правильный синтаксис для специализации этого шаблона функции? Кажется, работают оба следующих варианта:
template <>
std::string foo()
{
return whatever;
}
template <>
std::string foo<std::string>()
{
return whatever;
}
Есть ли разница между ними? Если нет, то какой идиоматический способ?