テンプレートレポジトリには、別々のコンパイルで共有できるテンプレートインスタンスが格納されます。したがって、テンプレートインスタンスは必要なときだけコンパイルされます。テンプレートレポジトリには、外部インスタンスを使用したときにテンプレートのインスタンス化に必要な、ソースファイル以外のすべてのファイルが含まれています。このレポジトリはその他の種類のインスタンスには使用されません。
テンプレートレポジトリは、デフォルトで、Sun WorkShop のキャッシュディレクトリ (SunWS_cache) にあります。Sun WorkShop のキャッシュディレクトリは、出力ファイルが置かれるのと同じディレクトリ内にあります。SUNWS_CACHE_DIR 環境変数を設定すれば、キャッシュディレクトリ名を変更できます。
コンパイラは、テンプレートインスタンスを格納しなければならないとき、出力ファイルに対応するテンプレートレポジトリにそれらを保存します。たとえば、次の例では、オブジェクトファイルを ./sub/a.o に書き込み、テンプレートインスタンスを ./sub/SunWS_cache にあるレポジトリに書き込みます。
demo% CC -o sub/a.o a.cc
コンパイラがテンプレートをインスタンス化するときにこのキャッシュディレクトリが存在しない場合は、このディレクトリが作成されます。
-ptrdirectory オプションでレポジトリを置くディレクトリを指定できます。
コンパイラは、読み取るオブジェクトファイルに対応したテンプレートレポジトリから読み取りを行います。たとえば次の例では、/sub1/SunWS_cache と ./sub2/SunWS_cache から読み取り、必要なら ./SunWS_cache へ書き込みます。
demo% CC sub1/a.o sub2/b.o
複数の -ptr オプションを使って複数のレポジトリを指定しないでください。-ptr では 1 つのレポジトリ位置しか指定できません。
テンプレートレポジトリを複数のプログラムやライブラリで共有しないでください。たとえば、次のようには指定しないでください。
demo% CC a.cc demo% CC b.cc
この指定をすると、整合性のない結果と予期できないリンクエラーが発生します。
したがって、実際には、別々のプログラム (またはライブラリ) を別々のディレクトリでコンパイルするか、プログラムやライブラリごとにテンプレートレポジトリを消去する必要があります。