コンパイラ エラー C2338
エラー メッセージ
エラー C2338 は、コンパイル中の static_assert
エラーが原因で発生する可能性があります。 メッセージは static_assert
パラメーターによって提供されます。
エラー C2338 は、コンパイラに対する外部プロバイダーによっても生成される場合があります。 ほとんどの場合、これらのエラーは属性プロバイダー DLL (ATLPROV など) によって報告されます。 このメッセージには、次のような一般的な形式があります。
'attribute' Atl 属性プロバイダー : エラー ATLnumbermessage
属性 'attribute' の使い方に誤りがあります
'usage': 属性 'usage' の形式が正しくありません
多くの場合、これらのエラーは回復不可能であり、致命的なコンパイラ エラーが続く可能性があります。
これらの問題を解決するには、属性の使用を修正します。 たとえば、属性パラメーターを使用する前に宣言する必要がある場合があります。 ATL エラー番号が指定されている場合は、そのエラーのドキュメントで詳細な情報を確認してください。
標準 C++11 以降では、constexpr
関数が定数式で使用される場合、既定では noexcept
と見なされなくなりました。 この動作変更は、Core Working Group (CWG) CWG 1351 の解決によるものであり、/permissive-
モードで有効になります。 次の例は、Visual Studio 2019 バージョン 16.1 以前ではコンパイルされますが、Visual Studio 2019 バージョン 16.2 では C2338 が生成されます。
// c2338.cpp
// Compile using: cl /EHsc /W4 /permissive- c2338.cpp
constexpr int f() { return 0; }
int main() {
static_assert(noexcept(f()), "f should be noexcept"); // C2338 in 16.2
}
このエラーを修正するには、noexcept
式を関数宣言に追加します。
// c2338_fixed.cpp
// Compile using: cl /EHsc /W4 /permissive- c2338_fixed.cpp
constexpr int f() noexcept { return 0; }
int main() {
static_assert(noexcept(f()), "f should be noexcept");
}
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示