テンプレートは宣言と定義の両方が必要になります。テンプレートを「定義」することで実装に必要な情報が得られます。次の例は、前述の例で宣言されたテンプレートを定義しています。
template <class Number> Number twice( Number original ) { return original + original; }
テンプレート定義は通常ヘッダーファイルで行われるので、テンプレート定義が複数のコンパイル単位で繰り返される可能性があります。しかし、すべての定義は同じでなければなりません。この制限は「単一定義ルール」と呼ばれます。
C++ 5.0 では、関数テンプレートには型名ではないテンプレートパラメータは使用できません。たとえば、次のテンプレートは、その引数が型ではなく式であるため使用できません。
template <int count> void foo( ) // パラメータが型名ではないので無効 { int x[count]supported non-type parameter for (int i = 0; i < count; ++i ) // ... x により何かを行う } foo<10>(); // テンプレート引数 10 により foo を呼び出そうとするが、無効