From 2d1d5a91359f3cf87528b1754174f0ffaef4accd Mon Sep 17 00:00:00 2001 From: paolo Date: Thu, 11 Oct 2012 10:27:45 +0000 Subject: [PATCH] 2012-10-11 Daniel Krugler * testsuite/20_util/common_type/requirements/sfinae_friendly_1.cc: Update / extend. * testsuite/20_util/common_type/requirements/sfinae_friendly_2.cc: Likewise. * testsuite/20_util/duration/requirements/sfinae_friendly_1.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@192352 138bc75d-0d04-0410-961f-82ee72b054a4 --- .../common_type/requirements/sfinae_friendly_1.cc | 62 ++++++++++++++-------- .../common_type/requirements/sfinae_friendly_2.cc | 6 ++- .../duration/requirements/sfinae_friendly_1.cc | 9 +++- 3 files changed, 50 insertions(+), 27 deletions(-) diff --git a/libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_1.cc b/libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_1.cc index c23521f..f73c6cc 100644 --- a/libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_1.cc +++ b/libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_1.cc @@ -163,20 +163,23 @@ namespace std { }; } -static_assert(is_type, int>(), ""); -static_assert(is_type, ScEn>(), ""); -static_assert(is_type, UnscEn>(), ""); -static_assert(is_type, int>(), ""); +#ifdef HAS_53000_FIXED +static_assert(is_type, int&&>(), ""); +static_assert(is_type, ScEn&&>(), ""); +static_assert(is_type, UnscEn&&>(), ""); +#endif static_assert(is_type, int>(), ""); -static_assert(is_type, int>(), ""); -static_assert(is_type, int>(), ""); -static_assert(is_type, int>(), ""); -static_assert(is_type, S>(), ""); -static_assert(is_type, const S>(), ""); +#ifdef HAS_53000_FIXED +static_assert(is_type, int&&>(), ""); +static_assert(is_type, int&&>(), ""); +static_assert(is_type, int&&>(), ""); +static_assert(is_type, S&&>(), ""); +static_assert(is_type, const S&&>(), ""); static_assert(is_type, - std::initializer_list>, std::initializer_list>(), ""); -static_assert(is_type, B>(), ""); -static_assert(is_type, B>(), ""); + std::initializer_list>, std::initializer_list&&>(), ""); +static_assert(is_type, B&&>(), ""); +static_assert(is_type, B&&>(), ""); +#endif static_assert(is_type, void*>(), ""); static_assert(is_type, void*>(), ""); static_assert(is_type, const volatile void*>(), ""); @@ -189,10 +192,15 @@ static_assert(is_type, void>(), ""); static_assert(is_type, void>(), ""); static_assert(is_type, int>(), ""); static_assert(is_type, int&>(), ""); -static_assert(is_type, int>(), ""); +#ifdef HAS_53000_FIXED +static_assert(is_type, int&&>(), ""); +static_assert(is_type, const int&&>(), ""); +#endif static_assert(is_type, const U>(), ""); static_assert(is_type, U&>(), ""); -static_assert(is_type, U>(), ""); +#ifdef HAS_53000_FIXED +static_assert(is_type, U&&>(), ""); +#endif static_assert(is_type, int D::*>(), ""); static_assert(is_type, int D::*>(), ""); static_assert(is_type, @@ -201,7 +209,9 @@ static_assert(is_type, int (D::*)()>(), ""); static_assert(is_type, int (D::*)() const>(), ""); -static_assert(is_type, int*>(), ""); +#ifdef HAS_53000_FIXED +static_assert(is_type, int(&&)[3]>(), ""); +#endif static_assert(is_type, const int*>(), ""); static_assert(is_type, void(&)()>(), ""); @@ -213,14 +223,18 @@ static_assert(is_type, static_assert(is_type, void(&)()>(), ""); static_assert(is_type, int>, int>(), ""); +#ifdef HAS_53000_FIXED static_assert(is_type, ImplicitTo>, - ImplicitTo>(), ""); + ImplicitTo&&>(), ""); +#endif static_assert(is_type, int, ImplicitTo>, int>(), ""); +#ifdef HAS_53000_FIXED static_assert(is_type, ExplicitTo>, - ExplicitTo>(), ""); + ExplicitTo&&>(), ""); static_assert(is_type, - decltype(lmd1)>(), ""); + decltype(lmd1)&&>(), ""); +#endif static_assert(is_type, decltype(lmd1)&>(), ""); static_assert(is_type, @@ -248,12 +262,12 @@ static_assert(is_type, Abstract*>(), ""); #ifdef HAS_53000_FIXED static_assert(is_type, - Abstract>(), ""); + Abstract&&>(), ""); static_assert(is_type, Abstract>(), ""); -static_assert(is_type, Ukn>(), ""); + volatile Abstract&&>, const volatile Abstract&&>(), ""); +static_assert(is_type, Ukn&&>(), ""); static_assert(is_type, - Ukn>(), ""); + const volatile Ukn&&>(), ""); #endif static_assert(is_type, RX12>(), ""); @@ -323,8 +337,10 @@ void test(int i) auto local_lmd1 = [=](int, double) { return i + i; }; auto local_lmd2 = [=](int, double) { return i - i; }; +#ifdef HAS_53000_FIXED static_assert(is_type, decltype(local_lmd1)>(), ""); + decltype(local_lmd1)>, decltype(local_lmd1)&&>(), ""); +#endif static_assert(is_type, decltype(local_lmd1)>(), ""); static_assert(is_type constexpr -std::array::type, sizeof...(Args)> +std::array::type>::type, + sizeof...(Args)> make_array(Args&&... args) // { dg-error "invalid use" } { - typedef typename std::common_type::type CT; + typedef typename std::decay::type>::type + CT; return std::array{static_cast (std::forward(args))...}; } diff --git a/libstdc++-v3/testsuite/20_util/duration/requirements/sfinae_friendly_1.cc b/libstdc++-v3/testsuite/20_util/duration/requirements/sfinae_friendly_1.cc index 48b0197..cf53a21 100644 --- a/libstdc++-v3/testsuite/20_util/duration/requirements/sfinae_friendly_1.cc +++ b/libstdc++-v3/testsuite/20_util/duration/requirements/sfinae_friendly_1.cc @@ -21,6 +21,9 @@ #include #include +//TODO: Uncomment this once gcc bug 53000 has been resolved: +//#define HAS_53000_FIXED + // Helper types: struct has_type_impl { @@ -52,8 +55,10 @@ typedef std::chrono::duration din; typedef std::chrono::duration ddn; typedef std::chrono::duration dim; -static_assert(is_type, din>(), ""); -static_assert(is_type, din>(), ""); +#ifdef HAS_53000_FIXED +static_assert(is_type, din&&>(), ""); +static_assert(is_type, din&&>(), ""); +#endif static_assert(is_type, ddn>(), ""); static_assert(is_type, ddn>(), ""); -- 2.7.4