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