Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Сообщение об ошибке
Замечания
Ошибка C2338 может быть вызвана ошибкой static_assert во время компиляции. Сообщение предоставляется параметрами static_assert .
Ошибка C2338 также может быть создана внешними поставщиками компилятора. В большинстве случаев эти ошибки сообщаются библиотекой DLL поставщика атрибутов, например ATLPROV. Ниже приведены некоторые распространенные формы этого сообщения:
Поставщик атрибутов Atl Atl: сообщение об номереATLошибки
Неправильное использование атрибута "атрибут"
"использование": неправильный формат атрибута "использование"
Эти ошибки часто не возвращаются и могут следовать за неустранимой ошибкой компилятора.
Чтобы устранить эти проблемы, исправьте использование атрибутов. Например, в некоторых случаях параметры атрибута должны быть объявлены до их использования. Если указан номер ошибки ATL, ознакомьтесь с документацией по этой ошибке для получения дополнительных сведений.
Example
В C++11 и более поздних constexpr версиях функции больше не рассматриваются noexcept по умолчанию при использовании в константном выражении. Это изменение поведения происходит из разрешения основной рабочей группы (CWG) CWG 1351 и включено в /permissive- режиме. Следующий пример компилируется в Visual Studio 2019 версии 16.1 и более ранних версиях, но вызывает C2338 в Visual Studio 2019 версии 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
}
Чтобы устранить эту ошибку, добавьте выражение 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");
}