C++11 属性の回避策(Clang 拡張 C++ コンパイラ)
Clang 拡張 C++ コンパイラは、C++11 属性である、deprecated、Final (C++)、noreturn をサポートしていません。これらは、旧世代 C++ コンパイラ(BCC32 と BCCOSX)によってサポートされています。
このトピックでは、Clang 拡張 C++ コンパイラの使用時に、欠けている属性 deprecated および Final (C++) の対処方法について説明します。 noreturn 属性については、対処方法はありません。
deprecated 属性の回避策
#pragma obsolete
を、deprecated 属性の回避策として使用することができます。 以下は、廃止予定の関数のための、簡単なサンプル コードです。
旧世代 C++ コンパイラでは:
int f(int a)[[deprecated]]{
//code here
}
Clang 拡張 C++ コンパイラでは:
int f(int a){
#pragma obsolete f
//code here
}
final 属性の回避策
Clang 拡張 C++ コンパイラでは、Final
キーワードが導入されており、C++11 Final (C++) 属性と同様の機能を提供しています。
以下は、final
キーワードを使用した簡単な使用例です。
旧世代 C++ コンパイラでは:
class A {
virtual int f()[[final]];
};
class B : public A {
int f(); // error, 'f' is marked 'final' and cannot be overridden
};
Clang 拡張 C++ コンパイラでは:
class A {
virtual int f() final;
};
class B : public A {
int f(); //error, declaration of 'f' overrides 'final' function
};