http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56395
Markus Trippelsdorf <markus at trippelsdorf dot de> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |markus at trippelsdorf dot | |de --- Comment #6 from Markus Trippelsdorf <markus at trippelsdorf dot de> 2013-02-20 12:19:47 UTC --- A little bit further reduced: template < typename T > struct I { typedef T type; }; template < typename T > struct F { typedef T type; }; template < typename ChildType > struct H { typedef ChildType ChildNodeType; template < typename RootNodeT > struct A { typedef RootNodeT NodeType; typedef typename F < NodeType >::type NonConstNodeType; }; typedef A < H > ChildOnCIter; }; template < bool > struct C; template <> struct C <false > { template < typename Sequence > struct G { typedef typename Sequence::tag type; }; }; template < typename Sequence > struct O:C < 0 >::G < Sequence > { }; template < typename > struct W; template < typename Sequence > struct P:W < typename O < Sequence >::type >::template X < Sequence > { }; template < typename > struct L; template < typename Sequence, typename T > struct Q:L < typename O < Sequence >::type > ::template X < Sequence, T > { }; template <> struct W <int > { template < typename Vector > struct X:I < Vector > { }; }; template < typename Base > struct R:Base { }; template < typename = int > struct V; template <> struct V <> { typedef int tag; }; struct S:R < V <> > { }; template < typename HeadT, int > struct J { typedef typename J < typename HeadT::ChildNodeType, 1 >::Type SubtreeT; typedef typename Q < SubtreeT, HeadT >::type Type; }; template < typename HeadT > struct J <HeadT, 0 > { typedef S Type; }; template < typename > struct IterTraits { template < typename OtherNodeT > struct K { typedef OtherNodeT Type; }; }; template < typename PrevItemT, typename NodeVecT, int > struct B { typedef typename PrevItemT::IterT PrevIterT; typedef typename P < NodeVecT >::type _NodeT; typedef typename IterTraits < PrevIterT >::template K < _NodeT >::Type IterT; IterTraits < IterT > ITraits; }; template < typename PrevItemT, typename NodeVecT > struct B <PrevItemT, NodeVecT, 0 > { typedef typename PrevItemT::IterT PrevIterT; typedef typename P < NodeVecT >::type _NodeT; typedef typename IterTraits < PrevIterT >::template K < _NodeT >::Type IterT; IterTraits < IterT > ITraits; }; template < typename RootChildOnIterT > struct N { typedef RootChildOnIterT RootIterT; typedef typename RootIterT::NonConstNodeType NCRootNodeT; typedef typename J < NCRootNodeT, 0 >::Type InvTreeT; struct M { typedef RootIterT IterT; }; B < M, InvTreeT, 0 > mIterList; }; template < typename T > struct D { N < typename T::ChildOnCIter > LeafCIter; }; D < H < int > >a;