Supponiamo di scrivere una classe template con un costruttore di template, in questo modo.Il costruttore del modello nella classe template deve essere definito nella definizione della classe?
template<typename T>
class X{
template<typename S>
X(X<S> x){}
};
compila bene. Tuttavia, quando cerco di definire il costruttore di fuori della dichiarazione modello, in questo modo:
template<typename T>
class X{
template<typename S>
X(X<S> x);
};
template<typename T, typename S>
X<T>::X(X<S> y){}
ricevo il seguente errore:
error: invalid use of incomplete type ‘class X<T>’
perché? Non è possibile definire un costruttore di template di una classe template al di fuori della dichiarazione di classe?