Поделиться через


Ошибка компилятора 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
}

Новый лямбда-процессор, доступный в /std:c++20 разделе или более поздних версиях, /Zc: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;
    };
}