相关疑难解决方法(0)

Clang在fold表达式中找不到模板二元运算符

这是连接元组的二元运算符:

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);
}
Run Code Online (Sandbox Code Playgroud)

它在两个元组的编译器(gcc,clang)上都能很好地工作:

template <class Arg1, class Arg2>
constexpr decltype(auto) concat_test(Arg1 &&arg1, Arg2 &&arg2) {
   return arg1 + arg2;
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在折叠表达式中使用它时,如下所示:

template <class... Args>
constexpr decltype(auto) multiple_concat(Args &&... args) {
   return (args + ...);
}
Run Code Online (Sandbox Code Playgroud)

gcc 7.1.1编译它没有任何错误,不像clang 5.0,它产生错误输出:

error:调用函数'operator +',它在模板定义中既不可见,也不能由参数依赖查找找到

return(args + ...);

注意:在实例化函数模板特化'multiple_concat <std :: __ 1 :: tuple&,std :: __ 1 :: tuple&>'这里请求

multiple_concat(tup1,tup2);

注意:'operator +'应在呼叫站点之前声明

constexpr decltype(auto)operator …

c++ templates variadic-templates c++17

5
推荐指数
1
解决办法
195
查看次数

标签 统计

c++ ×1

c++17 ×1

templates ×1

variadic-templates ×1