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

A.2.93 -template=opt[,opt…]

さまざまなテンプレートオプションを有効/無効にします。

A.2.93.1 値

opt は次のいずれかの値である必要があります。

表 A–21 -template の値

値 

意味  

[no%]extdef

別のソースファイルからテンプレート定義を検索します [しません]。 

[no%]geninlinefuncs

明示的にインスタンス化されたクラステンプレートのための非参照インラインメンバー関数を生成します [しません]。 

[no%]wholeclass

コンパイラに対し、使用されている関数だけインスタンス化するのではなく、テンプレートクラス全体をインスタンス化する [しない] ように指示します。クラスの少なくとも 1 つのメンバーを参照しなければいけません。そうでない場合は、コンパイラはそのクラスのどのメンバーもインスタンス化しません。 

デフォルト

-template オプションを指定しないと、-template=no%wholeclass,extdef が使用されます。

次のコードについて考えてみましょう。


example% cat Example.cc
     template <class T> struct S {
               void imf() {}
               static void smf() {}
     };

     template class S <int>;

     int main() {
     }
example%

-template=geninlinefuncs を指定した場合、S の 2 つのメンバー関数は、プログラム内で呼び出されなくてもオブジェクトファイルに生成されます。


example% CC -c -template=geninlinefuncs Example.cc
example% nm -C Example.o

Example.o:

[Index] Value Size Type  Bind  Other Shndx Name
[5]       0   0    NOTY  GLOB  0     ABS   __fsr_init_value
[1]       0   0    FILE  LOCL  0     ABS   b.c
[4]      16   32   FUNC  GLOB  0     2     main
[3]     104   24   FUNC  LOCL  0     2     void S<int>::imf()
                                           [__1cBS4Ci_Dimf6M_v_]
[2]     64    20   FUNC  LOCL  0     2     void S<int>::smf()
                                           [__1cBS4Ci_Dsmf6F_v_]

関連項目

「7.2.2 全クラスインスタンス化」「7.5 テンプレート定義の検索」