diff options
author | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
commit | 1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch) | |
tree | c607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept13.C | |
parent | 283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff) | |
download | toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2 toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip |
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept13.C')
-rw-r--r-- | gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept13.C | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept13.C new file mode 100644 index 000000000..e52e9a004 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept13.C @@ -0,0 +1,78 @@ +// PR c++/49107 +// { dg-do compile { target c++11 } } + +namespace std +{ + template<typename _Tp> _Tp&& declval() noexcept; + + struct true_type { static const bool value = true; }; + struct false_type { static const bool value = false; }; + + template<typename _Tp, typename _Arg> + struct __is_direct_constructible_impl + { + template<typename _Tp2, typename _Arg2, typename + = decltype(::new _Tp2(declval<_Arg2>()))> + static true_type __test(int); + + template<typename, typename> + static false_type __test(...); + + typedef decltype(__test<_Tp, _Arg>(0)) type; + }; + + template<typename _Tp, typename _Arg> + struct __is_direct_constructible_new_safe + : public __is_direct_constructible_impl<_Tp, _Arg>::type + { }; + + template<class _T1, class _T2> + struct pair + { + pair() = default; + constexpr pair(const pair&) = default; + + pair(pair&& __p) + noexcept(__is_direct_constructible_new_safe<_T2,_T2&&>::value); + }; +} + +template <class R_> +struct Vector3 +{ + typedef typename R_::Ray_3 Ray_3; + Vector3() {} + explicit Vector3(const Ray_3& r); +}; + +template < class R_ > class LineC3 +{ + typedef typename R_::Vector_3 Vector_3; + std::pair<int, Vector_3> x; +}; + +template < class R_ > class RayH3 +{ + typedef typename R_::Vector_3 Vector_3; + std::pair<int, Vector_3> x; +}; + +template <typename Kernel > +struct Homogeneous_base +{ + typedef LineC3<Kernel> Line_3; + typedef RayH3<Kernel> Ray_3; +}; + +template < typename RT_> +struct Simple_homogeneous +: public Homogeneous_base< Simple_homogeneous<RT_> > +{ + typedef Vector3<Simple_homogeneous<RT_> > Vector_3; +}; + +int main() +{ + typedef Simple_homogeneous<double> R; + R::Line_3 l3; +} |