VS2017不支持二进制折叠?

时间:2019-04-25 10:58:13

标签: c++ visual-studio-2017 c++17

为什么以下代码不能编译?

#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版本应该支持折叠运算符。

1 个答案:

答案 0 :(得分:6)

我必须承认我不知道VS 15.9.7是否支持折叠表达。但是,您会收到错误消息,因为std::cout << ... << args;不是fold-expression。正确的语法应为

(std::cout << ... << args);

还要注意,std::endl是一个模板函数,因此您不能简单地以您的方式传递它(因此会出现第二个错误)。