【发布时间】:2021-01-19 16:12:24
【问题描述】:
以下program:
#include<iostream>
auto f(auto ...args)
{
(std::cout << 1 << ... << args);
}
int main()
{
f(0, 0, 0);
}
gcc 打印 1000,但 clang 给出错误:
error: expression not permitted as operand of fold expression
(std::cout << 1 << ... << args);
~~~~~~~~~~^~~~
( )
我不确定我是否理解错误。像这样添加括号:
((std::cout << 1) << ... << args);
似乎仍然是一个表达式,但现在 clang 也接受了它,并且还打印了 1000。
另外,f 的auto 参数无关紧要,c++17 编写的等效程序具有相同的行为(如演示所示)。
那么这个程序有效吗?
【问题讨论】:
标签: c++ language-lawyer fold-expression