Warum beschwert sich enable_if_t in Vorlagenargumenten über Neudefinitionen?

Ich habe den folgenden Fall, der mit @ funktioniestd::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() { }

Nun, ich habe in cppreference die neue Syntax gesehen, die meiner Meinung nach viel sauberer ist:typename = std::enable_if_t<std::is_same<int, T>::value>>

Ich wollte meinen Code portieren:

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() { }

Aber jetzt beschwert sich GCC (5.2):

error: redefinition of 'template<class T, class> void g()'
       void g() { }

Warum ist das so ? Was kann ich tun, um in diesem Fall die neue, präzisere Syntax zu verwenden, wenn dies möglich ist?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage