template <typename T, typename = enable_if_t<is_same<T, int>::value>>
void qw(T t)
{
std::cout << "int " << endl;
}
template <typename T , typename = enable_if_t<is_same<T, float>::value>>
void qw(T t)
{
cout << "float" << endl;
}
// Invoked from main as
int main()
{
int x = 10;
qw(x);
}
The error I get with g++9.2
sp.cc:153:6: error: redefinition of ‘template<class T, class> void qw(T)’
153 | void qw(T t)
| ^~
sp.cc:147:6: note: ‘template<class T, class> void qw(T)’ previously declared here
147 | void qw(T t)
I would assume only one overload is well formed and will be selected. However it complains of multiple definitions. Can someone help explain why ?