コンパイラ エラー C2760
構文エラー: 'name2' ではなく 'name1' が必要です
構文エラー: 予期しないトークン '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;
};
}