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");