Partilhar via


Erro do compilador C2338

Mensagem de erro

Observações

O erro C2338 pode ser causado por um erro durante a static_assert compilação. A mensagem é fornecida pelos static_assert parâmetros.

O erro C2338 também pode ser gerado por provedores externos ao compilador. Na maioria dos casos, esses erros são relatados por uma DLL de provedor de atributo, como ATLPROV. Algumas formas comuns desta mensagem incluem:

  • 'attribute' Atl Attribute Provider : mensagem deerro do número ATL

  • Uso incorreto do atributo 'atributo'

  • 'uso': formato incorreto para o atributo 'uso'

Esses erros geralmente são irrecuperáveis e podem ser seguidos por um erro fatal do compilador.

Para corrigir esses problemas, corrija o uso do atributo. Por exemplo, em alguns casos, os parâmetros de atributo devem ser declarados antes de poderem ser usados. Se um número de erro ATL for fornecido, verifique a documentação para esse erro para obter informações mais específicas.

Example

No Standard C++11 e posterior, constexpr as funções não são mais consideradas noexcept por padrão quando usadas em uma expressão constante. Essa alteração de comportamento vem da resolução do Core Working Group (CWG) CWG 1351 e está habilitada no /permissive- modo. O exemplo a seguir compila no Visual Studio 2019 versão 16.1 e anterior, mas produz C2338 no Visual Studio 2019 versão 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
}

Para corrigir o erro, adicione a noexcept expressão à declaração de função:

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