Синтаксис для специализированных шаблонов функций в C ++

Предположим, у меня есть шаблон функции, в котором параметр типа используется только как возвращаемый тип:

template <typename T>
T foo()
{
    return whatever;
}

Тогда каков правильный синтаксис для специализации этого шаблона функции? Кажется, работают оба следующих варианта:

template <>
std::string foo()
{
    return whatever;
}

template <>
std::string foo<std::string>()
{
    return whatever;
}

Есть ли разница между ними? Если нет, то какой идиоматический способ?

6
задан Cœur 6 September 2018 в 10:56
поделиться