C++ の標準ライブラリには、多数のテンプレートと、それらのテンプレートを使用するための多数の新しい標準ヘッダー名が含まれています。サンの C++ の標準ライブラリでは、テンプレートヘッダーに宣言が置かれ、標準ライブラリのテンプレートはそれぞれ別のファイルに置かれています。このため、プロジェクトファイル名に新しいテンプレートヘッダーと同じものがある場合は、誤ったテンプレートファイルが選択され、多数の意味不明のメッセージが出力される可能性があります。たとえば、ユーザーが vector というテンプレートを独自に作成していて、標準ライブラリのテンプレートは vector.cc というファイルに含まれているとしましょう。ファイルの位置とコマンド行オプションによっては、標準ライブラリの vector.cc が必要なときに、ユーザーが作成した vector.cc が選択されたり、その逆のことが起きたりする可能性があります。コンパイラの将来のリリースで export のようなキーワードが制定され、それを使用するテンプレートが実装された場合この状況はさらに悪くなります。
現在および将来こうした問題が発生するのを防ぐために、以下の 2 つのことをお勧めします。
独自のテンプレートファイル名に標準ヘッダー名を使用しない。
標準ライブラリはすべて名前空間の std に含まれているため、ユーザー作成のテンプレートやクラスと直接的に名前の衝突が起こることはありません。ただし、using 宣言や指令による間接的な衝突の可能性はあるため、標準ライブラリとのテンプレート名の重複は避けるのが賢明です。次に、テンプレートに関係する標準ヘッダーを示します。
algorithm bitset complex deque exception fstream functional iomanip ios iosfwd iostream istream iterator limits list locale map memory numeric ostream queue set sstream stack stdexcept streambuf string typeinfo utility valarray vector
標準ライブラリのテンプレートは、独立したファイルではなくヘッダーファイル (.h) に格納する。 こうすることで、標準ライブラリのファイル名の衝突を防ぐことができます。詳細については『C++ ユーザーズガイド』を参照してください。