Share via


/Zc:lambda (Abilitare il processore lambda aggiornato)

L'opzione /Zc:lambda del compilatore consente di supportare la grammatica lambda e l'elaborazione conformi.

Sintassi

/Zc:lambda[-]

Osservazioni:

L'opzione /Zc:lambda del compilatore abilita il processore lambda conforme. Analizza e implementa il codice lambda in base allo standard C++. Questa opzione è disattivata per impostazione predefinita, che usa il processore lambda legacy. Usare questa opzione per abilitare i controlli della sintassi in modalità di conformità delle espressioni lambda generiche quando si usano le opzioni predefinite /std:c++14 o del /std:c++17 compilatore.

/Zc:lambda viene abilitato automaticamente dalle /std:c++20opzioni , [/std:c++latest] (std-specify-language-standard-version.md), /permissive-e /experimental:module . È possibile disabilitarla in modo esplicito usando /Zc:lambda-.

L'opzione /Zc:lambda è disponibile a partire da Visual Studio 2019 versione 16.8. È disponibile a /experimental:newLambdaProcessor partire da Visual Studio 2019 versione 16.3, ma questa ortografia è ora deprecata.

Il processore lambda legacy presenta limitazioni quando analizza e compila espressioni lambda. Ad esempio, questo codice conforme viene compilato correttamente in /Zc:lambda, ma segnala errori in /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
}

Il processore lambda legacy compila questo codice senza avvisi, ma il nuovo processore lambda genera l'errore C2760:

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

Questo esempio mostra la sintassi corretta, ora applicata dal compilatore in /Zc:lambda:

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

Per impostare questa opzione del compilatore in Visual Studio

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.

  2. Selezionare la pagina delle proprietà Proprietà di configurazione>C/C++>Riga di comando.

  3. Aggiungere /Zc:lambda o /Zc:lambda- al riquadro Opzioni aggiuntive: .

Vedi anche

/Zc (Conformità)
/std (Specificare la versione standard della lingua)