Sun Studio 12 Update 1: C++ ユーザーズガイド

A.2.19.1 値

互換モード (-compat[=4]) と標準モード (デフォルトモード) の両方で、次の値の 1 つを指定できます。

表 A–6 互換モードと標準モードでの -features オプション

値 

意味  

%all

指定されているモード (互換モードか標準モード) に対して有効なすべての -feature オプションを有効にします。

[no%]altspell

トークンの代替スペル (たとえば、&& の代わりの and) を認識します [しません]。デフォルトは互換モードで no%altspell、標準モードで altspell です。

[no%]anachronisms

廃止されている構文を許可します [しません]。無効にした場合 (つまり、-features=no%anachronisms)、廃止されている構文は許可されません。デフォルトは anachronisms です。

[no%]bool

ブール型とリテラルを許可します [しません]。有効にした場合、マクロ _BOOL=1 が定義されます。有効にしないと、マクロは定義されません。デフォルトは互換モードで no%bool、標準モードで bool です。

[no%]conststrings

リテラル文字列を読み取り専用メモリーに入れます [入れません]。デフォルトは互換モードで no%conststrings、標準モードで conststrings です。

[no%]except

C++ 例外を許可します [しません]。C++ 例外を無効にした場合 (つまり、-features=no%except)、関数に指定された throw は受け入れられますが無視されます。つまり、コンパイラは例外コードを生成しません。キーワード trythrow、および catch は常に予約されています。「8.3 例外の無効化」を参照してください。デフォルトは except です。

[no%]export

キーワード export を認識します [しません]。デフォルトは互換モードで no%export、標準モードで export です。この機能はまだ実装されていませんが、export キーワードは認識されます。

[no%]extensions

ほかの C++ コンパイラによって一般に受け入れられた非標準コードを許可します [しません]。-features=extensions オプションを使用するときにコンパイラによって受け入れられる無効なコードの説明については 表 3–17 を参照してください。デフォルトは no%extensions です。

[no%]iddollar

識別子の最初以外の文字に $ を許可します [しません]。デフォルトは no%iddollar です。

[no%]localfor

for 文に対して新しい局所スコープ規則を使用します [しません]。デフォルトは互換モードで no%localfor、標準モードで localfor です。

[no%]mutable

キーワード mutable を認識します [しません]。デフォルトは互換モードで no%mutable、標準モードで mutable です。

[no%]split_init

非ローカル静的オブジェクトの初期設定子を個別の関数に入れます [入れません]。-features=no%split_init を使用すると、コンパイラではすべての初期設定子が 1 つの関数に入れられます。-features=no%split_init を使用すると、コンパイル時間を可能なかぎり費やしてコードサイズを最小化します。デフォルトは split_init です。

[no%]transitions

標準 C++ で問題があり、しかもプログラムが予想とは違った動作をする可能性があるか、または将来のコンパイラで拒否される可能性のある ARM 言語構造を許可します [しません]。-features=no%transitions を使用すると、コンパイラではこれらの言語構造をエラーとして扱います。-features=transitions を標準モードで使用すると、これらの言語構造に関してエラーメッセージではなく警告が出されます。-features=transitions を互換モード (-compat[=4]) で使用すると、コンパイラでは +w または +w2 が指定された場合にかぎりこれらの言語構造に関する警告が表示されます。次の構造は移行エラーとみなされます。テンプレートの使用後にテンプレートを再定義する、typename 指示をテンプレートの定義に必要なときに省略する、int 型を暗黙的に宣言する。一連の移行エラーは将来のリリースで変更される可能性があります。デフォルトは transitions です。

%none

指定されているモードに対して無効にできるすべての機能を無効にします。 

標準モード (デフォルトのモード) では、a にはさらに次の値の 1 つを指定できます。

表 A–7 標準モードだけに使用できる -features オプション

値 

意味  

[no%]strictdestrorder

静的記憶領域にあるオブジェクトを破棄する順序に関する、C++ 標準の必要条件に従います [従いません]。デフォルトは strictdestrorder です。

[no%]tmplrefstatic

関数テンプレートからの依存静的関数または静的関数テンプレートの参照を許可します [許可しません]。デフォルトは標準準拠の no%tmplrefstatic です。

[no%]tmplife

完全な式の終わりに式によって作成される一時オブジェクトを ANSI/ISO C++ 標準の定義に従って整理します [しません]。-features=no%tmplife が有効である場合は、大多数の一時オブジェクトはそのブロックの終わりに整理されます。デフォルトは compat=4 モードで no%tmplife、標準モードで tmplife です。

互換モード (-compat[=4]) では、a にはさらに次の値の 1 つを指定できます。

表 A–8 互換モードだけに使用できる -features オプション

値 

意味  

[no%]arraynew

operator new と operator delete の配列形式を認識します [しません] (たとえば、operator new [ ] (void*))。これを有効にすると、マクロ __ARRAYNEW=1 が定義されます。有効にしないと、マクロは定義されません。デフォルトは no%arraynew です。

[no%]explicit

キーワード explicit を認識します [しません]。デフォルトは no%explicit です。

[no%]namespace

キーワード namespaceusing を許可します [しません]。デフォルトは no%namespace です。

-features=namespace は、コードを標準モードに変換しやすくするために使用します。このオプションを有効にすると、これらのキーワードを識別子として使用している場合にエラーメッセージが表示されます。キーワード認識オプションを使用すると、標準モードでコンパイルすることなく、追加キーワードが使用されているコードを特定することができます。

[no%]rtti

実行時の型識別 (RTTI) を許可します [しません]。dynamic_cast<> および typeid 演算子を使用する場合は、RTTI を有効にする必要があります。-compat=4 mode の場合、デフォルトは no%rtti です。そうでない場合、デフォルトは -features=rtti で、オプション -features=no%rtti は使用できません。


注 –

[no%]castop の設定は、C++ 4.2 コンパイラ用に作成されたメイクファイルとの互換性を維持するために使用できますが、それ以降のバージョンのコンパイラには影響はありません。新しい書式の型変換 (const_castdynamic_castreinterpret_caststatic_cast) は常に認識され、無効にすることはできません。


デフォルト

–features を指定しないと、互換モードのデフォルト (-compat[=4]) が使用されます。


–features=%none,anachronisms,except,split_init,transitions

デフォルトである「標準モード」では、


-features=%all,no%extensions,no%iddollar,no%tmplrefstatic

が使用されます。

相互の関連性

このオプションは、置き換えられる代わりに蓄積されます。

次の値の標準モードによる使用 (デフォルト) は、標準ライブラリやヘッダーと互換性がありません。

互換モード (-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++ 移行ガイド