Общие лямбды с массивами статического размера в качестве аргументов

Является ли следующая универсальная (полиморфная) лямбда допустимой в 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'

7

Решение

Это незаконно.

[Dcl.array] / 1, Акцент мой:

В декларации T D, где D имеет вид

D1 [ константа-выражениевыбирать ] Атрибут спецификатор-слвыбирать

и тип идентификатора в объявлении T D1 является «производный описатель типа-лист T», То тип идентификатора D тип массива; если тип идентификатора D содержит auto Тип Спецификатор, программа плохо сформирована.

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]