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?