Partage via


/Zc:lambda (Activer le processeur lambda mis à jour)

L’option /Zc:lambda du compilateur active la prise en charge de la grammaire et du traitement lambda conformes.

Syntaxe

/Zc:lambda[-]

Notes

L’option /Zc:lambda du compilateur active le processeur lambda conforme. Il analyse et implémente du code lambda en fonction de la norme C++. Cette option est désactivée par défaut, qui utilise le processeur lambda hérité. Utilisez cette option pour activer les vérifications de syntaxe en mode conformité des lambda génériques lorsque vous utilisez les options par défaut /std:c++14 ou du /std:c++17 compilateur.

/Zc:lambda est automatiquement activé par les /std:c++20options , [/std:c++latest] (std-specify-language-standard-version.md), /permissive-et /experimental:module les options. Vous pouvez le désactiver explicitement à l’aide /Zc:lambda-de .

L’option /Zc:lambda est disponible à partir de Visual Studio 2019 version 16.8. Il est disponible à /experimental:newLambdaProcessor partir de Visual Studio 2019 version 16.3, mais cette orthographe est désormais déconseillée.

Le processeur lambda hérité présente des limitations lorsqu’il analyse et compile des lambdas. Par exemple, ce code conforme se compile correctement sous /Zc:lambda, mais signale des erreurs sous /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
}

Le processeur lambda hérité compile ce code sans avertissements, mais le nouveau processeur lambda génère l’erreur C2760 :

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

Cet exemple montre la syntaxe correcte, désormais appliquée par le compilateur sous /Zc:lambda:

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

Pour définir cette option de compilateur dans Visual Studio

  1. Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.

  2. Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.

  3. Ajoutez ou /Zc:lambda- accédez /Zc:lambda aux options supplémentaires : volet.

Voir aussi

/Zc (Conformité)
/std (Spécifier la version du standard du langage)