I am currently having an issue with C++ metaprogramming system. To be more specific, the issue is about partial template specialisation.

Suppose I define a template as below:

I can specialise W in many different ways. Some examples follow:Code:template<typename T> struct W {...};

I assume it is possible to specialise W (even partially) for any type, may it be defined by myself or not.Code:template<> struct W<int> {...}; template<typename T> struct W<T*> {...}; template<typename T> struct W<const T* const &> {...}; ...

Nevertheless, I am not being able to specialse it for inner classes of template structures. For instance, suppose I define:

How do I get to specialise W for Y? I tried writtingCode:template<typename T> struct X { ... struct Y {...}; };

without much success.Code:template<typename T> struct W<typename X<T>::Y> {...};

Can someone help me with this?

Thanks in advance.