Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Параметр /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 (определение стандартной версии языка)