Kompilatorfel C2338

Felmeddelande

Anmärkningar

Felet C2338 kan orsakas av ett static_assert fel under kompilering. Meddelandet tillhandahålls av parametrarna static_assert .

Fel C2338 kan också genereras av externa leverantörer till kompilatorn. I de flesta fall rapporteras dessa fel av en attributprovider-DLL, till exempel ATLPROV. Några vanliga former av det här meddelandet är:

  • Attributet Atl-attributprovider: felmeddelande om ATL-nummer

  • Felaktig användning av attributet "attribute"

  • "usage": felaktigt format för attributet "usage"

Dessa fel kan ofta inte återställas och kan följas av ett allvarligt kompilatorfel.

Åtgärda dessa problem genom att korrigera attributanvändningen. I vissa fall måste till exempel attributparametrar deklareras innan de kan användas. Om du anger ett ATL-felnummer kan du läsa mer specifik information i dokumentationen för felet.

Example

I Standard C++11 och senare constexpr beaktas noexcept inte längre funktioner som standard när de används i ett konstant uttryck. Den här beteendeändringen kommer från lösningen för CWG (Core Working Group) CWG 1351 och är aktiverad i /permissive- läge. Följande exempel kompileras i Visual Studio 2019 version 16.1 och tidigare, men producerar C2338 i Visual Studio 2019 version 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
}

Åtgärda felet genom att lägga till noexcept uttrycket i funktionsdeklarationen:

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