Почему 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() { }

Почему это так ? Что я могу сделать, чтобы иметь новый, более краткий синтаксис в этом случае, если это возможно?

Ответы на вопрос(4)

Ваш ответ на вопрос