Solution pour les attributs C++11 (Compilateurs C++ améliorés par Clang)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Fonctionnalités C++11 - Index


Les compilateurs C++ améliorés par Clang ne prennent pas en charge les attributs C++11 deprecated, final (C++) et noreturn (qui sont pris en charge par les compilateurs de précédente génération (BCC32 et BCCOSX)).

Cette rubrique explique comment travailler autour de les attributs manquants deprecated et final (C++) lors de l'utilisation des compilateurs améliorés par Clang. Il n'y a pas de solution pour l'attribut noreturn.

Solution pour l'attribut deprecated

Vous pouvez utiliser #pragma obsolete comme solution pour l'attribut deprecated. Voici un court exemple de code pour une fonction deprecated.

Dans les compilateurs C++ de précédente génération

 int f(int a)[[deprecated]]{
 	//code here
 }

Dans les compilateurs C++ améliorés par Clang:

 int f(int a){
 	#pragma obsolete f
 	//code here
 }

Solution pour l'attribut final

Dans les compilateurs C++ améliorés par Clang, le mot clé final a été introduit, en fournissant la même fonctionnalité que l'attribut C++11 final (C++).

Voici un court exemple d'utilisation du mot clé final.

Dans les compilateurs C++ de précédente génération

 class A {
 	virtual int f()[[Final (C++)]];
 };
 
 class B : public A {
 	int f(); // error, 'f' is marked 'final' and cannot be overridden
 };

Dans les compilateurs C++ améliorés par Clang:

 class A {
 	virtual int f() final;
 };
 
 class B : public A {
 	int f(); //error, declaration of 'f' overrides 'final' function
 };

Voir aussi