模板参数中的enable_if_t重定义错误
在C中,使用enable_if_t的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_t<std::is_same<int, T>::value>> void g() { }
使用 GCC (5.2) 编译会产生错误:
“错误:重新定义 'template
原因错误
出现该错误是因为两个模板函数f和g具有相同的模板类型void()。尽管它们的第二个模板参数具有不同的默认值,但它们仍然具有相同的类型。
解决方案
要解决此问题,请更新语法以使用 std:: enable_if_t 具有不同的第二个参数类型。例如:
template<typename T, std::enable_if_t<std::is_same<int, T>::value, int>* = nullptr> void f() { } template<typename T, std::enable_if_t<std::is_same<double, T>::value, double>* = nullptr> void g() { }
此修改可确保两个模板函数具有不同的模板类型,并消除重定义错误。
以上是为什么我在模板参数中遇到'enable_if_t”的重新定义错误?的详细内容。更多信息请关注PHP中文网其他相关文章!