为什么以下代码不能编译?
#include <iostream>
template<typename... Args>
void print_all( Args&&... args )
{
std::cout << ... << args;
}
int main()
{
print_all( 1, 2, 3, std::endl );
return 0;
}
我在VS2017 15.9.7中使用/ std:c ++ 17遇到以下错误
error C2760: syntax error: unexpected token '...', expected 'expression'
error C2660: 'print_all': function does not take 4 arguments
如果删除std :: endl,第二个错误消失了,但是无论使用哪种运算符,任何使用二进制折叠表达式的操作都会出现第一个错误。根据{{3}},我的VS版本应该支持折叠运算符。
答案 0 :(得分:6)
我必须承认我不知道VS 15.9.7是否支持折叠表达。但是,您会收到错误消息,因为std::cout << ... << args;
不是fold-expression。正确的语法应为
(std::cout << ... << args);
还要注意,std::endl
是一个模板函数,因此您不能简单地以您的方式传递它(因此会出现第二个错误)。