Yes - consider [temp.mem.class] / 1:
A member class of a class template can be defined outside the class definition of the template in which it is declared.
[Note: Member class must be determined before its first use, which requires (14.7.1). For instance,
template<class T> struct A {
class B;
};
A<int>::B* b1; // OK: requires A to be defined but not A::B
template<class T> class A<T>::B { };
A<int>::B b2; // OK: requires A::B to be defined
- end note]
, inner, inner , , :
[...] , , , ,
OuterTempl, inner , inner . , . OuterTempl , inner, .
template<typename T>
struct OuterTempl
{
struct InnerTempl;
InnerTempl inner;
};
template struct OuterTempl<int>;
template<typename T>
struct OuterTempl<T>::InnerTempl {};
template struct OuterTempl<int>;
.