对于以下程序:
#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
.
另外,auto
参数为f
无关紧要,用c++17编写的等效程序具有相同的行为(如演示所示)。
那么这个程序有效吗?