diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept11.C')
-rw-r--r-- | gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept11.C | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept11.C new file mode 100644 index 0000000..6597f40 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept11.C @@ -0,0 +1,53 @@ +// PR c++/49107 +// { dg-do compile { target c++11 } } + +template<typename _Tp> +_Tp declval() noexcept; + +template<typename _Tp , typename = decltype(_Tp(declval<_Tp&&>()))> +struct trait +{ + static const bool value=true; +}; + +template<class _T2> +struct pair +{ + _T2 second; + void swap(pair& __p) + noexcept(trait<_T2>::value); +}; + +template < class R_ > +struct Main +{ + Main() {} + Main(const typename R_::Sub1T& r) ; + Main(const typename R_::Sub2T& l) ; +}; + +template < class R_ > +class Sub1 +{ + typedef pair<typename R_::MainT> Rep; + Rep base; +}; + +template < class R_ > +struct Sub2 +{ + typedef pair<typename R_::MainT> Rep; + Rep base; +}; + +struct Kernel +{ + typedef Main<Kernel> MainT; + typedef Sub1<Kernel> Sub1T; + typedef Sub2<Kernel> Sub2T; +}; + +Main<Kernel> f() +{ + return Main<Kernel> (); +} |