If this class template specialization is an instantiation of a template (rather than an explicit specialization), return the class template or class template partial specialization from which it was instantiated. More...

Retrieve the set of template arguments that should be used to instantiate members of the class template or class template partial specialization from which this class template specialization was instantiated. More...

Determine whether this class is an aggregate (C++ [dcl.init.aggr]), which is a class with no user-declared constructors, no private or protected non-static data members, no base classes, and no virtual functions (C++ [dcl.init.aggr]p1). More...

isTransparentContext - Determines whether this context is a "transparent" context, meaning that the members declared in this context are semantically declared in the nearest enclosing non-transparent (opaque) context but are lexically declared in this context. More...

getPrimaryContext - There may be many different declarations of the same entity (including forward declarations of classes, multiple definitions of namespaces, etc.), each with a different set of declarations. More...

Retrieve the member class template partial specialization from which this particular class template partial specialization was instantiated.

template<typename T>

struct Outer {

template<typename U> struct Inner;

template<typename U> struct Inner<U*> { }; // #1

};

Outer<float>::Inner<int*> ii;

In this example, the instantiation of Outer<float>::Inner<int*> will end up instantiating the partial specialization Outer<float>::Inner<U*>, which itself was instantiated from the class template partial specialization Outer<T>::Inner<U*>. Given Outer<float>::Inner<U*>, this function would return Outer<T>::Inner<U*>.