使用enable_if]出现多个重载的问题>

问题描述 投票:1回答:1
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)

我会假设只有一个重载是正确形成的,将被选择。但是,它抱怨有多个定义。有人可以帮忙解释原因吗?

模板:: value >> void qw(T t){std :: cout <

c++ templates c++17 sfinae template-specialization
1个回答
2
投票

来自cppreference,此示例作为注释:

© www.soinside.com 2019 - 2024. All rights reserved.