コンマで区切って指定された C++ 言語のさまざまな機能を、有効または無効にします。
互換モード (-compat[=4]) と標準モード (デフォルトモード) の両方で、次の値の 1 つを指定できます。
表 A–6 互換モードと標準モードでの -features オプション
値 |
意味 |
---|---|
%all |
指定されているモード (互換モードか標準モード) に対して有効なすべての -feature オプションを有効にします。 |
[no%]altspell |
トークンの代替スペル (たとえば、&& の代わりの and) を認識します [しません]。デフォルトは互換モードで no%altspell、標準モードで altspell です。 |
廃止されている構文を許可します [しません]。無効にした場合 (つまり、-features=no%anachronisms)、廃止されている構文は許可されません。デフォルトは anachronisms です。 |
|
ブール型とリテラルを許可します [しません]。有効にした場合、マクロ _BOOL=1 が定義されます。有効にしないと、マクロは定義されません。デフォルトは互換モードで no%bool、標準モードで bool です。 |
|
リテラル文字列を読み取り専用メモリーに入れます [入れません]。デフォルトは互換モードで no%conststrings、標準モードで conststrings です。 |
|
C++ 例外を許可します [しません]。C++ 例外を無効にした場合 (つまり、-features=no%except)、関数に指定された throw は受け入れられますが無視されます。つまり、コンパイラは例外コードを生成しません。キーワード try、throw、および catch は常に予約されています。「8.3 例外の無効化」を参照してください。デフォルトは except です。 |
|
キーワード export を認識します [しません]。デフォルトは互換モードで no%export、標準モードで export です。この機能はまだ実装されていませんが、export キーワードは認識されます。 |
|
ほかの C++ コンパイラによって一般に受け入れられた非標準コードを許可します [しません]。-features=extensions オプションを使用するときにコンパイラによって受け入れられる無効なコードの説明については 表 3–17 を参照してください。デフォルトは no%extensions です。 |
|
識別子の最初以外の文字に $ を許可します [しません]。デフォルトは no%iddollar です。 |
|
for 文に対して新しい局所スコープ規則を使用します [しません]。デフォルトは互換モードで no%localfor、標準モードで localfor です。 |
|
[no%]mutable |
キーワード mutable を認識します [しません]。デフォルトは互換モードで no%mutable、標準モードで mutable です。 |
非ローカル静的オブジェクトの初期設定子を個別の関数に入れます [入れません]。-features=no%split_init を使用すると、コンパイラではすべての初期設定子が 1 つの関数に入れられます。-features=no%split_init を使用すると、コンパイル時間を可能なかぎり費やしてコードサイズを最小化します。デフォルトは split_init です。 |
|
標準 C++ で問題があり、しかもプログラムが予想とは違った動作をする可能性があるか、または将来のコンパイラで拒否される可能性のある ARM 言語構造を許可します [しません]。-features=no%transitions を使用すると、コンパイラではこれらの言語構造をエラーとして扱います。-features=transitions を標準モードで使用すると、これらの言語構造に関してエラーメッセージではなく警告が出されます。-features=transitions を互換モード (-compat[=4]) で使用すると、コンパイラでは +w または +w2 が指定された場合にかぎりこれらの言語構造に関する警告が表示されます。次の構造は移行エラーとみなされます。テンプレートの使用後にテンプレートを再定義する、typename 指示をテンプレートの定義に必要なときに省略する、int 型を暗黙的に宣言する。一連の移行エラーは将来のリリースで変更される可能性があります。デフォルトは transitions です。 |
|
%none |
指定されているモードに対して無効にできるすべての機能を無効にします。 |
標準モード (デフォルトのモード) では、a にはさらに次の値の 1 つを指定できます。
表 A–7 標準モードだけに使用できる -features オプション
値 |
意味 |
---|---|
静的記憶領域にあるオブジェクトを破棄する順序に関する、C++ 標準の必要条件に従います [従いません]。デフォルトは strictdestrorder です。 |
|
[no%]tmplrefstatic |
関数テンプレートからの依存静的関数または静的関数テンプレートの参照を許可します [許可しません]。デフォルトは標準準拠の no%tmplrefstatic です。 |
完全な式の終わりに式によって作成される一時オブジェクトを ANSI/ISO C++ 標準の定義に従って整理します [しません]。-features=no%tmplife が有効である場合は、大多数の一時オブジェクトはそのブロックの終わりに整理されます。デフォルトは compat=4 モードで no%tmplife、標準モードで tmplife です。 |
互換モード (-compat[=4]) では、a にはさらに次の値の 1 つを指定できます。
表 A–8 互換モードだけに使用できる -features オプション
値 |
意味 |
---|---|
operator new と operator delete の配列形式を認識します [しません] (たとえば、operator new [ ] (void*))。これを有効にすると、マクロ __ARRAYNEW=1 が定義されます。有効にしないと、マクロは定義されません。デフォルトは no%arraynew です。 |
|
キーワード explicit を認識します [しません]。デフォルトは no%explicit です。 |
|
キーワード namespace と using を許可します [しません]。デフォルトは no%namespace です。 -features=namespace は、コードを標準モードに変換しやすくするために使用します。このオプションを有効にすると、これらのキーワードを識別子として使用している場合にエラーメッセージが表示されます。キーワード認識オプションを使用すると、標準モードでコンパイルすることなく、追加キーワードが使用されているコードを特定することができます。 |
|
実行時の型識別 (RTTI) を許可します [しません]。dynamic_cast<> および typeid 演算子を使用する場合は、RTTI を有効にする必要があります。-compat=4 mode の場合、デフォルトは no%rtti です。そうでない場合、デフォルトは -features=rtti で、オプション -features=no%rtti は使用できません。 |
[no%]castop の設定は、C++ 4.2 コンパイラ用に作成されたメイクファイルとの互換性を維持するために使用できますが、それ以降のバージョンのコンパイラには影響はありません。新しい書式の型変換 (const_cast、dynamic_cast、reinterpret_cast、static_cast) は常に認識され、無効にすることはできません。
–features を指定しないと、互換モードのデフォルト (-compat[=4]) が使用されます。
–features=%none,anachronisms,except,split_init,transitions |
デフォルトである「標準モード」では、
-features=%all,no%extensions,no%iddollar,no%tmplrefstatic |
が使用されます。
このオプションは、置き換えられる代わりに蓄積されます。
次の値の標準モードによる使用 (デフォルト) は、標準ライブラリやヘッダーと互換性がありません。
no%bool
no%except
no%mutable
no%explicit
互換モード (-compat[=4]) では、+w オプションまたは +w2 オプションを指定しないかぎり、-features=transitions オプションは無効です。
-features=%all や -features=%none を使用するときは注意してください。機能群がコンパイラおよびパッチのリリースのたびに変わる可能性があります。その結果、予期しない動作になる可能があります。
-features=tmplife オプションを使用すると、プログラムの動作が変わる場合があります。プログラムが -features=tmplife オプションを指定してもしなくても動作するかどうかをテストする方法は、プログラムの移植性をテストする方法の 1 つです。
互換モード (-compt=4) の場合、デフォルトではコンパイラは -features=split_init と見なします。-features=%none オプションを使用してほかの機能を使用できないようにした場合は、代わりに -features=%none,split_init を使用して初期設定子の個別の関数への分割をまた有効にすることをお勧めします。
表 3–17 および『C++ 移行ガイド』