这是我连接元组的二元运算符:
template <class... Args1, class... Args2>
constexpr decltype(auto) operator+(const std::tuple<Args1...> &tup1,
const std::tuple<Args2...> &tup2) {
return std::tuple_cat(tup1, tup2);
}
它在具有两个元组的两个编译器(gcc、clang)上完美运行:
template <class Arg1, class Arg2>
constexpr decltype(auto) concat_test(Arg1 &&arg1, Arg2 &&arg2) {
return arg1 + arg2;
}
但是当我尝试在折叠表达式中使用它时,如下所示:
template <class... Args>
constexpr decltype(auto) multiple_concat(Args &&... args) {
return (args + ...);
}
gcc 7.1.1 编译它时没有任何错误,这与 clang 5.0 不同,它会产生错误输出:
错误:调用函数“operator+”,该函数在模板定义中不可见,也无法通过参数相关的查找找到
返回(参数+...);
注意:在函数模板特化'multiple_concat ' 的实例化中请求这里
多重连接(tup1,tup2);
注意:“operator+”应在调用站点之前声明
constexpr decltype(自动)operator+(const std::tuple &tup1, const std::tuple &tup2)
这段代码格式错误吗? clang 到底在说什么?
由于其他答案没有出来并说:代码很好。这是一个由来已久的Clang https://bugs.llvm.org/show_bug.cgi?id=30590 bug https://bugs.llvm.org/show_bug.cgi?id=30738,影响 11 之前的版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)