4 template <unsigned> struct X { typedef int Type; };
5 template <typename T> struct Y { char array[1]; };
7 template<typename T> Y<T> P(T); // acts as "Y<typeof(T)>"
9 struct F { int operator()() const; };
12 typename X<sizeof(P( T()() ).array)>::Type foo();