C++ 为什么折叠表达式不适用于for循环?

C++ 为什么折叠表达式不适用于for循环?,c++,syntax,compiler-errors,c++17,fold-expression,C++,Syntax,Compiler Errors,C++17,Fold Expression,以下资料来自: 模板 constexpr void tuple::swap(tuple和其他) { 对于…(constexpr size\u t N:view::iota(0uz,sizeof…(类型))) { 交换(获取(*此),获取(其他)); } } 但是,我不能以相同的方式编译以下代码: #include <iostream> #include <vector> template<typename... Args> void f(Args&

以下资料来自:

模板
constexpr void tuple::swap(tuple和其他)
{
对于…(constexpr size\u t N:view::iota(0uz,sizeof…(类型)))
{
交换(获取(*此),获取(其他));
}
}
但是,我不能以相同的方式编译以下代码:

#include <iostream>
#include <vector>

template<typename... Args>
void f(Args&&... args)
{
    for...(auto n : args) // error: expected '(' before '...' token
    {
        std::cout << n << std::endl;
    }
}

int main()
{
    auto v = std::vector{1, 2, 3};
    f(v, v, v);
}
#包括
#包括
模板
无效f(参数&&…参数)
{
for…(自动n:args)//错误:应为“(”在“…”之前)
{

std::cout因为折叠表达式是…表达式。for循环是一个语句。
..
解包适用于表达式,而不是语句(只有一个或两个例外)

下面是来自权威的C++提案[…] /P> 一个建议是一个建议。找到一个ISO C++文件并不意味着论文内容被接受到ISO+ C++标准中。在一个提案中发现的代码样本不能保证有效,有时作者故意使用伪代码来避免不必要的样板。


<>代码>…<代码>是无效的C++语法。你可以查看最新的标准草案来查看语言中的哪些内容,而不是什么。

是提案中的代码片段。请参见:@ XMLMX:它是一个提案的代码。这个建议的建议将被采纳并采用该语法。@ XMLMX你认为什么?“提案”一词是指?所引用的方案被C++23接受。@Yakk-AdamNevraumont@xmllmx:…和?接受的是一个较小的库更改,添加了两个文字后缀。参考
for…
提案就是一个库更改有用的例子。真正的提案部分是措辞部分;其他所有内容都解释为这就是为什么应该采用它。
#include <iostream>
#include <vector>

template<typename... Args>
void f(Args&&... args)
{
    for...(auto n : args) // error: expected '(' before '...' token
    {
        std::cout << n << std::endl;
    }
}

int main()
{
    auto v = std::vector{1, 2, 3};
    f(v, v, v);
}