Partager via


/Zc:noexceptTypes (Règles noexcept C++17)

La norme C++17 crée throw() un alias pour noexcept, supprime throw()type-listet throw(...)permet à certains types d’inclure .noexcept Cette modification peut entraîner un certain nombre de problèmes de compatibilité source dans le code qui sont conformes à C++14 ou version antérieure. L’option /Zc:noexceptTypes spécifie la conformité à la norme C++17. /Zc:noexceptTypes- autorise le comportement C++14 et antérieur lorsque le code est compilé en mode C++17.

Syntaxe

/Zc:noexceptTypes[-]

Notes

Lorsque l’option /Zc:noexceptTypes est spécifiée, le compilateur est conforme à la norme C++17 et traite throw() comme un alias pour noexcept, supprime throw()type-listet throw(...)permet à certains types d’inclure .noexcept L’option /Zc:noexceptTypes est disponible uniquement lorsque /std:c++17 ou une version ultérieure est activée. /Zc:noexceptTypes est activé par défaut pour se conformer aux normes ISO C++17 et ultérieures. L’option /permissive- n’affecte /Zc:noexceptTypespas . Désactivez cette option en spécifiant /Zc:noexceptTypes- de rétablir le comportement C++14 du noexcept moment /std:c++17 ou ultérieur.

À compter de Visual Studio 2017 version 15.5, le compilateur C++ diagnostique des spécifications d’exception plus incompatibles dans les déclarations en mode C++17 ou lorsque vous spécifiez l’option /permissive- .

Cet exemple montre comment les déclarations avec un spécificateur d’exception se comportent lorsque l’option /Zc:noexceptTypes est définie ou désactivée. Pour afficher le comportement lors de la définition, compilez à l’aide cl /EHsc /W4 noexceptTypes.cppde . Pour afficher le comportement lorsqu’il est désactivé, compilez à l’aide cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cppde .

// noexceptTypes.cpp
// Compile by using: cl /EHsc /W4 noexceptTypes.cpp
// Compile by using: cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cpp

void f() throw();    // equivalent to void f() noexcept;
void f() { }         // warning C5043
void g() throw(...); // warning C5040

struct A
{
    virtual void f() throw();
};

struct B : A
{
    virtual void f() { } // error C2694
};

Lors de la compilation à l’aide du paramètre /Zc:noexceptTypespar défaut, l’exemple génère les avertissements répertoriés. Pour mettre à jour votre code, utilisez plutôt les éléments suivants :

void f() noexcept;
void f() noexcept { }
void g() noexcept(false);

struct A
{
    virtual void f() noexcept;
};

struct B : A
{
    virtual void f() noexcept { }
};

Pour plus d’informations sur les problèmes de conformité dans Visual C++, consultez Nonstandard Behavior.

Pour définir cette option du compilateur dans l'environnement de développement Visual Studio

  1. Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.

  2. Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.

  3. Modifiez la propriété Options supplémentaires pour inclure /Zc:noexceptTypes ou /Zc:noexceptTypes- choisissez OK.

Voir aussi

/Zc (Conformité)
noexcept
Spécifications d’exception (levée)