编译器错误 C2760

语法错误:预期的“name1”而不是“name2
语法错误:意外令牌“token1”,预期为“token2
语法错误:此处出现意外的“token1”,预期为“token2

注解

有多种方法会导致此错误。 通常是由编译器无法理解的令牌序列引起的。

示例

在此示例中,强制转换运算符与无效运算符一起使用。

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

新 lambda 处理器在 /std:c++20 或更高版本中提供,或在 /Zc:lambda 下提供,可在泛型 lambda 中启用一些新的一致性模式语法检查。 旧版 lambda 处理器编译此代码时不会出现警告,但新的 lambda 处理器会生成错误 C2760:

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

此示例显示正确的语法,现在由编译器强制执行,此编译器在所有 /std 模式下均可工作:

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