1 // PR c++/50800
2 // { dg-do compile { target c++11 } }
3 
4 template <typename> struct A;
5 template <typename _Up> struct A<_Up *> { typedef _Up type; };
6 template <typename T> struct B { typedef typename A<T>::type type; };
7 template <typename> struct C;
8 template <typename From> struct C<const From> {
9   typedef typename B<From>::type SimpleType;
10 };
11 template <class> struct D { typedef int ret_type; };
12 template <class From> struct F {
13   typedef typename D<typename C<From>::SimpleType>::ret_type ret_type;
14 };
15 template <class, class Y> typename F<Y>::ret_type cast(Y &);
16 class CompoundStmt;
17 class alignas(8) Stmt {
18   Stmt *Children[1];
19   CompoundStmt *getBlock() const { cast<CompoundStmt>(Children[0]); return 0; }
20 };
21