У меня есть следующий случай, который работает с помощью 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() { }
Почему это так? Что я могу сделать, чтобы иметь новый, более сжатый синтаксис в этом случае, если это возможно?