Sdílet prostřednictvím


Chyba kompilátoru C2338

Chybová zpráva

Poznámky

Chyba C2338 může být způsobena chybou static_assert během kompilace. Zpráva je zadána parametry static_assert .

Chyba C2338 může být také generována externími poskytovateli kompilátoru. Ve většině případů jsou tyto chyby hlášeny knihovnou DLL zprostředkovatele atributů, například ATLPROV. Mezi běžné formy této zprávy patří:

  • 'attribute' Atl Attribute Provider: error ATLnumbermessage

  • Nesprávné použití atributu "attribute"

  • "usage": nesprávný formát atributu usage

Tyto chyby jsou často neopravitelné a můžou následovat závažná chyba kompilátoru.

Pokud chcete tyto problémy vyřešit, opravte použití atributu. Například v některých případech musí být parametry atributů deklarovány dříve, než je lze použít. Pokud je k dispozici číslo chyby ATL, vyhledejte si konkrétnější informace v dokumentaci k této chybě.

Example

Ve standardu C++11 a novějších constexpr funkcích se při použití ve výrazu konstanty ve výchozím nastavení nepovažují noexcept . Tato změna chování pochází z rozlišení základní pracovní skupiny (CWG) CWG 1351 a je povoleno v /permissive- režimu. Následující příklad se zkompiluje v sadě Visual Studio 2019 verze 16.1 a starší, ale vytvoří C2338 v sadě Visual Studio 2019 verze 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
}

Pokud chcete chybu opravit, přidejte noexcept výraz do deklarace funkce:

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