Почему enable_if_t в аргументах шаблона жалуется на переопределения?
У меня есть следующий случай, который работает с помощьюstd::enable_if
:
template<typename T,
typename std::enable_if<std::is_same<int, T>::value>::type* = nullptr>
void f() { }
template<typename T,
typename std::enable_if<std::is_same<double, T>::value>::type* = nullptr>
void f() { }
Теперь я увидел в cppreference новый синтаксис, гораздо более чистый, на мой взгляд:typename = std::enable_if_t<std::is_same<int, T>::value>>
Я хотел портировать свой код:
template<typename T,
typename = std::enable_if_t<std::is_same<int, T>::value>>
void g() { }
template<typename T,
typename = std::enable_if_t<std::is_same<double, T>::value>>
void g() { }
Но теперь GCC (5.2) жалуется:
error: redefinition of 'template<class T, class> void g()'
void g() { }
Почему это так ? Что я могу сделать, чтобы иметь новый, более краткий синтаксис в этом случае, если это возможно?