/Zc:noexceptTypes
(Règles noexcept C++17)
La norme C++17 crée throw()
un alias pour noexcept
, supprime throw(
)
type-list
et 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-list
et 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:noexceptTypes
pas . 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.cpp
de . Pour afficher le comportement lorsqu’il est désactivé, compilez à l’aide cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cpp
de .
// 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:noexceptTypes
par 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
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.
Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.
Modifiez la propriété Options supplémentaires pour inclure
/Zc:noexceptTypes
ou/Zc:noexceptTypes-
choisir OK.
Voir aussi
/Zc
(Conformité)
noexcept
Spécifications d’exception (levée)