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)
我会假设只有一个重载是正确形成的,将被选择。但是,它抱怨有多个定义。有人可以帮忙解释原因吗?
模板
来自cppreference,此示例作为注释: