Kompilatorfel C2760

syntaxfel: förväntat "name1" inte "name2"
syntaxfel: oväntad token 'token1', förväntad 'token2'
syntaxfel: "token1" var oväntat här; förväntad "token2"

Anmärkningar

Det finns flera sätt att orsaka det här felet. Vanligtvis orsakas det av en tokensekvens som kompilatorn inte kan förstå.

Exempel

I det här exemplet används en gjutningsoperator med en ogiltig operator.

// 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
}

Den nya lambda-processorn som är tillgänglig under /std:c++20 eller senare, eller under /Zc:lambda, möjliggör vissa nya syntaktiska kontroller i överensstämmelseläge i generiska lambdas. Den äldre lambda-processorn kompilerar den här koden utan varningar, men den nya lambda-processorn genererar felet C2760:

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

Det här exemplet visar rätt syntax, som nu framtvingas av kompilatorn, som fungerar i alla /std lägen:

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