Поделиться через


/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

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.

  3. Добавьте /Zc:lambda или /Zc:lambda- в область "Дополнительные параметры".

См. также

/Zc (Соответствие)
/std (определение стандартной версии языка)