/Zc:lambda
(Povolení aktualizovaného procesoru lambda)
Možnost kompilátoru /Zc:lambda
umožňuje splňovat podporu gramatiky a zpracování lambda.
Syntaxe
/Zc:lambda
[-
]
Poznámky
Možnost /Zc:lambda
kompilátoru umožňuje odpovídající procesor lambda. Parsuje a implementuje kód lambda podle standardu C++. Tato možnost je ve výchozím nastavení vypnutá, která používá starší procesor lambda. Pomocí této možnosti můžete povolit kontroly syntaxe v režimu shody obecných lambda při použití výchozích /std:c++14
možností nebo možností kompilátoru /std:c++17
.
/Zc:lambda
je automaticky povolena pomocí /std:c++20
možnosti , [/std:c++latest
] (std-specify-language-standard-version.md) /permissive-
a /experimental:module
možnosti. Explicitně ho můžete zakázat pomocí ./Zc:lambda-
Tato /Zc:lambda
možnost je dostupná od sady Visual Studio 2019 verze 16.8. Je k dispozici od /experimental:newLambdaProcessor
sady Visual Studio 2019 verze 16.3, ale tato kontrola pravopisu je teď zastaralá.
Starší procesor lambda má při analýze a kompilaci lambda omezení. Například tento odpovídající kód se správně zkompiluje pod /Zc:lambda
, ale hlásí chyby v /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
}
Starší procesor lambda tento kód zkompiluje bez upozornění, ale nový procesor lambda způsobí chybu C2760:
void f2() {
auto a = [](auto arg) {
decltype(arg)::Type t; // C2760 syntax error: unexpected token 'identifier', expected ';'
};
}
Tento příklad ukazuje správnou syntaxi, kterou teď kompilátor vynucuje v části /Zc:lambda
:
void f3() {
auto a = [](auto arg) {
typename decltype(arg)::Type t;
};
}
Nastavení této možnosti kompilátoru v sadě Visual Studio
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností příkazového řádku C/C++>Vlastnosti>konfigurace.
Přidejte
/Zc:lambda
nebo/Zc:lambda-
do podokna Další možnosti: