静的インスタンスの場合は、すべてのインスタンスが現在のコンパイル単位内に置かれます。その結果、テンプレートは各再コンパイル作業中に再インスタンス化されます。インスタンスはテンプレートレポジトリに保存されません。
インスタンスは静的リンケージを受け取ります。これらのインスタンスは、現在のコンパイル単位以外では認識することも使用することもできません。そのため、テンプレートの同じインスタンス化がいくつかのオブジェクトファイルに存在することがあります。これには、次の欠点があります。
複数のインスタンスによって不必要に大きなプログラムが生成されます (したがって、静的インスタンスのリンケージは、テンプレートがインスタンス化される回数が少ない小さなプログラムだけに適しています)。
静的変数を持つテンプレートにはその変数のコピーがたくさんあります。これは必然的に C++ 標準に違反することになります。したがって、静的インスタンスはテンプレート内の静的変数には使用できません。
静的インスタンスは潜在的にコンパイル速度が速いため、修正継続機能を使用したデバッグにも適しています (『dbx コマンドによるデバッグ』を参照してください)。
静的インスタンスリンケージは、-instances=static コンパイルオプションで指定します。静的インスタンスリンケージは、定義取り込み型テンプレート編成 (テンプレートを使用するファイルの中にテンプレートの宣言と定義が含まれている編成) でのみ使用することができます。コンパイラは定義を検索しません (『C++ プログラミングガイド』を参照してください)。