C++11 属性の回避策(Clang 拡張 C++ コンパイラ)

提供: RAD Studio
移動先: 案内検索

従来のコンパイラにおける C++11 機能 への移動

Clang 拡張 C++ コンパイラは、C++11 属性である、deprecatedFinal (C++)noreturn をサポートしていません。これらは、旧世代 C++ コンパイラ(BCC32BCCOSX)によってサポートされています。

このトピックでは、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
};

関連項目