Sun C++ コンパイラのテンプレートは、AT&T の Cfront コンパイラのものとは異なります。Cfront では、リンク時インスタンス化という方式が採用されており、次のようなアルゴリズムになっています。
すべてのユーザーソースファイルをコンパイルする。
プリリンカー (リンクの前処理をするプログラム) を使用して、手順 1 で作成されたすべてのオブジェクトファイルをリンクし、部分リンク済みの実行可能ファイルを作成する。
リンク出力を調べて、ソース中で使用されているテンプレートが存在する、未定義のすべての関数をインスタンス化する。
作成されたすべてのテンプレートと、手順 2 で作成された部分リンク済みの実行可能ファイルをリンクする。
ソース中で使用されているテンプレート関数が存在する、未定義の関数がなくなるまで、手順 3 と 4 を繰り返す。
作成されたすべてのオブジェクトファイルに対してリンクを行う。
リンク時インスタンス化の最大の利点は、特殊化 (インスタンス化されたテンプレート関数を無効にするための、ユーザー提供の関数のこと) を処理するための特別な外部サポートが必要ないという点です。コンパイラによるインスタンス化の対象になるのは、ユーザーソースファイルに定義されていない関数だけです。
しかし、リンク時インスタンス化には次の 2 つの大きな欠点もあります。
リンク段階でインスタンス化が行われるため、インスタンス化で発生したエラーメッセージが、インスタンス化機能を使用した後でしか出力されない。この結果、エラーの発生場所についての有効な追跡手段がない。
プリリンカーを繰り返し呼び出すと、リンク時間が大幅に増大する可能性がある。