1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// PR c++/4926 // { dg-do compile } template <unsigned> struct X { typedef int Type; }; template <typename T> struct Y { char array[1]; }; template<typename T> Y<T> P(T); // acts as "Y<typeof(T)>" struct F { int operator()() const; }; template <typename T> typename X<sizeof(P( T()() ).array)>::Type foo(); void bar () { foo<F>(); }