>>69
基本はプログラム中に同じものの定義はひとつだけ(ODR)なんだけど、
いくつか条件付で複数の定義が認められているものがある。
規格の 3.2 p5 より。
> There can be more than one definition of a class type, enumeration type,
> inline function with external linkage, class template, non-static
> function template, static data member of a class template, member
> function of a class template, or template specialization for which some
> template parameters are not specified in a program provided that each
> definition appears in a different translation unit, and provided the
> definitions satisfy the following requirements. ...
順に並べ上げると、
・クラス
・列挙
・外部リンケージを持つ inline 関数
・クラステンプレート
・非 static 関数テンプレート
・クラステンプレートの static データメンバ
・クラステンプレートのメンバ関数
・いくつかのテンプレート引数が特定されていないテンプレート特殊化
が該当する。こいつらは複数のコンパイル単位にあっても、それらが同じ内容で
あれば(この条件の詳細は上記の引用の続きにある)認められる。

「特殊化で型が確定したテンプレート関数」はこれらに該当しないので、定義を
ひとつだけにする(.cppに置く)必要がある。