Erreur du compilateur C2760

erreur de syntaxe : 'name1' attendu et non 'name2'
erreur de syntaxe : jeton inattendu 'token1', 'token2' attendu
erreur de syntaxe : « token1 » était inattendu ici ; « token2 » attendu

Notes

Il existe plusieurs façons de provoquer cette erreur. En règle générale, il est dû à une séquence de jetons dont le compilateur ne peut pas avoir le sens.

Exemple

Dans cet exemple, un opérateur de cast est utilisé avec un opérateur non valide.

// C2760.cpp
class B {};
class D : public B {};

void f(B* pb) {
    D* pd1 = static_cast<D*>(pb);
    D* pd2 = static_cast<D*>=(pb);  // C2760
    D* pd3 = static_cast<D*=(pb);   // C2760
}

Le nouveau processeur lambda disponible sous ou version /std:c++20 ultérieure, ou sous/Zc:lambda, active une nouvelle case activée syntactique en mode de conformité dans les lambda génériques. Le processeur lambda hérité compile ce code sans avertissements, mais le nouveau processeur lambda génère l’erreur C2760 :

void f() {
    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, qui fonctionne dans tous les /std modes :

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