1 // Origin: PR c++/43704 2 // { dg-do compile } 3 4 template<typename T2, typename T3> 5 struct if_ 6 { 7 typedef T2 type; 8 }; 9 10 template<class I1> 11 struct iterator_restrict_traits 12 { 13 struct iterator_category {}; 14 }; 15 16 template<class T> 17 struct matrix 18 { 19 struct ci {struct ic {};}; 20 class i {}; 21 }; 22 23 template<class M, class TRI> 24 struct triangular_adaptor 25 { 26 typedef typename if_<typename M::ci,typename M::i>::type ty1; 27 class iterator2 : iterator_restrict_traits<typename ty1::ic>::iterator_category 28 { 29 }; 30 }; 31 32 template<class M> 33 struct banded_adaptor 34 { 35 typedef typename if_<typename M::ci,typename M::i>::type ty1; 36 class iterator1 : iterator_restrict_traits<typename ty1::ic>::iterator_category 37 { 38 }; 39 }; 40 41 template<class T> 42 struct singular_decomposition 43 { 44 banded_adaptor<matrix<double> >::iterator1 it1; 45 }; 46 47