Vit*_*meo 14 c++ lambda language-lawyer variadic-templates c++17
请考虑以下代码段:
template <int... Is>
void foo()
{
([i = Is]{}(), ...);
}
Run Code Online (Sandbox Code Playgroud)
clang++ (trunk)成功编译代码 -std=c++17
g++ (trunk)无法编译,并出现以下错误:
<source>: In function 'void foo()':
<source>:4:11: error: parameter packs not expanded with '...':
([i = Is]{}(), ...);
^~
<source>:4:11: note: 'Is'
<source>:4:16: error: operand of fold expression has no unexpanded parameter packs
([i = Is]{}(), ...);
~~~~~~~~~~^~
Run Code Online (Sandbox Code Playgroud)
这是一个g++错误,还是标准阻止扩展参数包作为lambda介绍者的一部分?
这有一个关于它的错误的外观.
包扩展由模式和省略号组成,其实例化在列表中产生零个或多个模式的实例化(如下所述).模式的形式取决于扩展发生的环境.包扩展可以在以下上下文中发生:
- ... [不相关]
- 在fold-expression中; 模式是包含未扩展参数包的强制转换表达式.
一个完整的lambda表达式(就像你有的那样)带有函数调用,如果跟随语法产生,则是一个有效的强制转换表达式.没有理由阻止它成为有效的模式.
| 归档时间: |
|
| 查看次数: |
425 次 |
| 最近记录: |