Delen via


Compilerfout C2338

Foutmelding

Opmerkingen

Fout C2338 kan worden veroorzaakt door een static_assert fout tijdens de compilatie. Het bericht wordt door de static_assert parameters opgegeven.

Fout C2338 kan ook worden gegenereerd door externe providers voor de compiler. In de meeste gevallen worden deze fouten gerapporteerd door een DLL van de kenmerkprovider, zoals ATLPROV. Enkele veelvoorkomende vormen van dit bericht zijn:

  • 'kenmerk' Atl Attribute Provider: foutATL-nummerbericht

  • Onjuist gebruik van kenmerk 'kenmerk'

  • 'gebruik': onjuiste indeling voor kenmerk 'gebruik'

Deze fouten zijn vaak onherstelbaar en kunnen worden gevolgd door een fatale compilerfout.

Als u deze problemen wilt oplossen, corrigeert u het kenmerkgebruik. In sommige gevallen moeten kenmerkparameters bijvoorbeeld worden gedeclareerd voordat ze kunnen worden gebruikt. Als er een ATL-foutnummer wordt opgegeven, raadpleegt u de documentatie voor die fout voor meer specifieke informatie.

Example

In Standaard C++11 en hoger constexpr worden functies niet langer als standaard beschouwd noexcept wanneer ze worden gebruikt in een constante expressie. Deze gedragswijziging komt van de resolutie van Core Working Group ( CWG) CWG 1351 en is ingeschakeld in /permissive- de modus. Het volgende voorbeeld wordt gecompileerd in Visual Studio 2019 versie 16.1 en eerder, maar produceert C2338 in Visual Studio 2019 versie 16.2:

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

Als u de fout wilt oplossen, voegt u de noexcept expressie toe aan de functiedeclaratie:

// 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");
}