このように、テンプレート コンストラクターを使用してテンプレート クラスを作成するとします。
template<typename T>
class X{
template<typename S>
X(X<S> x){}
};
正常にコンパイルされます。ただし、次のように、テンプレート宣言の外でコンストラクターを定義しようとすると、次のようになります。
template<typename T>
class X{
template<typename S>
X(X<S> x);
};
template<typename T, typename S>
X<T>::X(X<S> y){}
次のエラーが表示されます。
error: invalid use of incomplete type ‘class X<T>’
なぜ?クラス宣言の外でテンプレート クラスのテンプレート コンストラクターを定義することはできませんか?