// PR c++/50800 // { dg-do compile { target c++11 } } template struct A; template struct A<_Up *> { typedef _Up type; }; template struct B { typedef typename A::type type; }; template struct C; template struct C { typedef typename B::type SimpleType; }; template struct D { typedef int ret_type; }; template struct F { typedef typename D::SimpleType>::ret_type ret_type; }; template typename F::ret_type cast(Y &); class CompoundStmt; class alignas(8) Stmt { Stmt *Children[1]; CompoundStmt *getBlock() const { cast(Children[0]); return 0; } };