Является ли следующая универсальная (полиморфная) лямбда допустимой в 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'
Это незаконно.
[Dcl.array] / 1, Акцент мой:
В декларации T D, где D имеет вид
D1 [ константа-выражениевыбирать ] Атрибут спецификатор-слвыбиратьи тип идентификатора в объявлении
T D1
является «производный описатель типа-листT
», То тип идентификатораD
тип массива; если тип идентификатораD
содержитauto
Тип Спецификатор, программа плохо сформирована.
Других решений пока нет …