C++ 如何使这些折叠表达式工作?

C++ 如何使这些折叠表达式工作?,c++,templates,fold-expression,C++,Templates,Fold Expression,我不明白为什么会这样: template <typename ... Types> void func() { (std::cout << typeid(Types).name(), ...) ; // Syntax error, unexpected token '...', expected 'expression' (static_assert(std::is_integral_v<Types>, "Type must be

我不明白为什么会这样:

template <typename ... Types>
void func()
{

    (std::cout << typeid(Types).name(), ...) ; // Syntax error, unexpected token '...', expected 'expression'
    (static_assert(std::is_integral_v<Types>, "Type must be integral type"), ...); // Syntax error: unexpected token 'static_assert', expected 'expression'
}
int main()
{
    func<int, short>();

}
模板
void func()
{

(std::cout运算符
运算符
折叠表达式不能包含优先级低于强制转换的(未指定的)运算符


因此,要么添加括号:
((std::cout折叠表达式不能包含优先级低于强制转换的(未指定的)运算符


因此,要么添加括号:
((std::cout您的第一个语法错误可能是由于没有使用C++17作为折叠表达式而导致的。
我试图用C++14编译您的代码,但得到了相同的语法错误

(std::cout << typeid(Types).name(), ...);  // needs C++17, Syntax error with C++14

(std::cout您的第一个语法错误可能是由于没有使用C++17作为折叠表达式而导致的。
我试图用C++14编译您的代码,但得到了相同的语法错误

(std::cout << typeid(Types).name(), ...);  // needs C++17, Syntax error with C++14
(标准::cout)
static_assert((std::is_integral_v<Types> && ...), "Type must be integral type")
(std::cout << typeid(Types).name(), ...);  // needs C++17, Syntax error with C++14
static_assert((std::is_integral_v<Types> && ...), "Type must be integral type");