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

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

Другие вопросы по тегам