Share via


/Zc:lambda (habilitar processador lambda atualizado)

A opção do compilador /Zc:lambda habilita o suporte ao processamento e à gramática lambda em conformidade.

Sintaxe

/Zc:lambda[-]

Comentários

A opção do compilador /Zc:lambda habilita o processador lambda em conformidade. Analisa e implementa o código lambda de acordo com o padrão C++. Essa opção está desativada por padrão, que usa o processador lambda herdado. Use essa opção para habilitar verificações de sintaxe no modo de conformidade de lambdas genéricos ao usar as opções do compilador /std:c++14 padrão ou /std:c++17.

/Zc:lambda é ativado /std:c++20automaticamente pelas opções , [/std:c++latest] (std-specify-language-standard-version.md), /permissive-e /experimental:module . Você pode desabilitá-lo explicitamente usando /Zc:lambda-.

A opção /Zc:lambda está disponível a partir do Visual Studio 2019 versão 16.8. Está disponível como /experimental:newLambdaProcessor a partir do Visual Studio 2019 versão 16.3, mas essa ortografia agora está preterida.

O processador lambda herdado tem limitações quando analisa e compila lambdas. Por exemplo, esse código em conformidade é compilado corretamente em /Zc:lambda, mas relata erros em /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
}

O processador lambda herdado compila esse código sem avisos, mas o novo processador lambda produz o erro C2760:

void f2() {
    auto a = [](auto arg) {
        decltype(arg)::Type t; // C2760 syntax error: unexpected token 'identifier', expected ';'
    };
}

O exemplo mostra a sintaxe correta, agora imposta pelo compilador em /Zc:lambda:

void f3() {
    auto a = [](auto arg) {
        typename decltype(arg)::Type t;
    };
}

Para definir essa opção do compilador no Visual Studio

  1. Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.

  2. Selecione a página de propriedades Propriedades de Configuração>C/C++>Linha de Comando.

  3. Adicione /Zc:lambda ou /Zc:lambda- ao painel Opções adicionais:.

Confira também

/Zc (Conformidade)
/std (Especificar a versão padrão da linguagem)