具有静态大小数组作为参数的通用lambdas

Pet*_*ter 7 c++ generic-lambda c++14

以下是通用(多态)lambda合法C++ 14吗?

auto f = [](auto x[3]) {
    x[0];
    x[1];
    // etc.
};
Run Code Online (Sandbox Code Playgroud)

GCC和Clang 4接受代码,但Visual Studio 2017不接受.这合法吗?

error C3318: 'auto [3]': an array cannot have an element type that contains 'auto'
Run Code Online (Sandbox Code Playgroud)

cpp*_*ner 9

这是非法的.

[dcl.array]/1,强调我的:

在TD的声明中,D表格

D1 [ constant-expressionopt ] attribute-specifier-seqopt

并且声明中标识符的类型T D1是" derived-declarator-type-list T ",那么标识符的D类型是数组类型; 如果标识符Dauto 类型包含类型说明符,则程序格式错误.

  • 这取决于您是否直接在通用lambda的*parameter-declaration-clause*上进行此检查,或者仅在使用发明的模板参数进行转换后进行检查.我也怀疑这是允许的.虽然+1. (4认同)