Общие лямбды с массивами статического размера в качестве аргументов
Является ли следующая универсальная (полиморфная) лямбда допустимой в C++ 14?
auto f = [](auto x[3]) {
x[0];
x[1];
// etc.
};
GCC и Clang 4 принимают код, а Visual Studio 2017 - нет. Это законно?
error C3318: 'auto [3]': an array cannot have an element type that contains 'auto'
1 ответ
Решение
Это незаконно.
[dcl.array] / 1, выделение мое:
В декларации T D, где D имеет вид
D1 [ постоянное выражение opt ] атрибут-спецификатор-seq optи тип идентификатора в объявлении
T D1
такое " производный-декларатор-тип-список"T
", То тип идентификатораD
тип массива; если тип идентификатораD
содержитauto
спецификатор типа, программа плохо сформирована.