/Zc:lambda
(Включить обновленный лямбда-процессор)
Параметр /Zc:lambda
компилятора позволяет соответствовать лямбда-грамматике и поддержке обработки.
Синтаксис
/Zc:lambda
[-
]
Замечания
Параметр /Zc:lambda
компилятора включает соответствующий лямбда-процессор. Он анализирует и реализует лямбда-код в соответствии со стандартом C++. Этот параметр отключен по умолчанию, который использует устаревший лямбда-процессор. Используйте этот параметр для включения проверки синтаксиса в режиме соответствия универсальных лямбда-кодов при использовании параметров компилятора по умолчанию /std:c++14
или компилятора /std:c++17
.
/Zc:lambda
автоматически включается /std:c++20
параметром , [/std:c++latest
] (std-specify-language-standard-version.md), /permissive-
а также /experimental:module
параметрами. Его можно отключить явным образом с помощью /Zc:lambda-
.
Этот /Zc:lambda
параметр доступен начиная с Visual Studio 2019 версии 16.8. Она доступна как /experimental:newLambdaProcessor
начиная с Visual Studio 2019 версии 16.3, но эта орфография теперь устарела.
Устаревший лямбда-процессор имеет ограничения при анализе и компиляции лямбда-процессоров. Например, этот соответствующий код компилируется правильно /Zc:lambda
, но сообщает об ошибках в /Zc:lambda-
разделе :
void f1()
{
constexpr auto c_value = 1;
auto func = []()
{
return c_value; // error C3493: 'c_value' cannot be implicitly captured
// because no default capture mode has been specified
};
func(); // error C2064: term does not evaluate to a function taking 0 arguments
}
Устаревший лямбда-процессор компилирует этот код без предупреждений, но новый лямбда-процессор выдает ошибку C2760:
void f2() {
auto a = [](auto arg) {
decltype(arg)::Type t; // C2760 syntax error: unexpected token 'identifier', expected ';'
};
}
В этом примере показан правильный синтаксис, который теперь применяется компилятором в разделе /Zc:lambda
:
void f3() {
auto a = [](auto arg) {
typename decltype(arg)::Type t;
};
}
Установка параметра компилятора в Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
Добавьте
/Zc:lambda
или/Zc:lambda-
в область "Дополнительные параметры".
См. также
/Zc
(Соответствие)
/std
(определение стандартной версии языка)