1 // PR c++/49107 2 // { dg-do compile { target c++11 } } 3 4 template<typename _Tp> 5 _Tp declval() noexcept; 6 7 template<typename _Tp , typename = decltype(_Tp(declval<_Tp&&>()))> 8 struct trait 9 { 10 static const bool value=true; 11 }; 12 13 template<class _T2> 14 struct pair 15 { 16 _T2 second; 17 void swap(pair& __p) 18 noexcept(trait<_T2>::value); 19 }; 20 21 template < class R_ > 22 struct Main 23 { MainMain24 Main() {} 25 Main(const typename R_::Sub1T& r) ; 26 Main(const typename R_::Sub2T& l) ; 27 }; 28 29 template < class R_ > 30 class Sub1 31 { 32 typedef pair<typename R_::MainT> Rep; 33 Rep base; 34 }; 35 36 template < class R_ > 37 struct Sub2 38 { 39 typedef pair<typename R_::MainT> Rep; 40 Rep base; 41 }; 42 43 struct Kernel 44 { 45 typedef Main<Kernel> MainT; 46 typedef Sub1<Kernel> Sub1T; 47 typedef Sub2<Kernel> Sub2T; 48 }; 49 f()50Main<Kernel> f() 51 { 52 return Main<Kernel> (); 53 } 54