【发布时间】:2020-04-19 22:22:28
【问题描述】:
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);
}
我在使用 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)
我假设只有一个重载格式良好并且会被选中。然而,它抱怨有多种定义。有人可以帮忙解释为什么吗?
【问题讨论】:
标签: c++ templates c++17 sfinae template-specialization