Re: [PATCH] Add noexcept to tuple<> and simplify tuple noexcept-specifiers

2019-06-03 Thread Szabolcs Nagy
On 31/05/2019 15:58, Jonathan Wakely wrote:
> * include/std/tuple (tuple<>): Add noexcept to allocator-extended
> constructors.
> (tuple::__nothrow_default_constructible()): New helper
> function.
> (tuple::tuple(), explicit tuple::tuple()): Use helper.
> 
> Tested powerpc64le-linux, committed to trunk.

on aarch64* i see

FAIL: g++.dg/cpp0x/noexcept15.C  -std=c++14 (test for excess errors)

In file included from /S/gcc/testsuite/g++.dg/cpp0x/noexcept15.C:4:
/B/aarch64-none-linux-gnu/libstdc++-v3/include/type_traits: In instantiation of 
'struct std::is_nothrow_move_constructible':
/S/gcc/testsuite/g++.dg/cpp0x/noexcept15.C:14:5:   required from 
'single::single(single&&) [with Tp = Blob]'
/S/gcc/testsuite/g++.dg/cpp0x/noexcept15.C:23:51:   required from 'constexpr 
single::type> make_single(Tp&&) [with Tp =
Blob&; typename std::decay<_Tp>::type = Blob]'
/S/gcc/testsuite/g++.dg/cpp0x/noexcept15.C:31:18:   required from here
/B/aarch64-none-linux-gnu/libstdc++-v3/include/type_traits::52: error: 
static assertion failed: template argument must be a complete class
or an unbounded array


Re: [PATCH] Add noexcept to tuple<> and simplify tuple noexcept-specifiers

2019-06-03 Thread Jonathan Wakely

On 03/06/19 09:44 +, Szabolcs Nagy wrote:

On 31/05/2019 15:58, Jonathan Wakely wrote:

* include/std/tuple (tuple<>): Add noexcept to allocator-extended
constructors.
(tuple::__nothrow_default_constructible()): New helper
function.
(tuple::tuple(), explicit tuple::tuple()): Use helper.

Tested powerpc64le-linux, committed to trunk.


on aarch64* i see

FAIL: g++.dg/cpp0x/noexcept15.C  -std=c++14 (test for excess errors)

In file included from /S/gcc/testsuite/g++.dg/cpp0x/noexcept15.C:4:
/B/aarch64-none-linux-gnu/libstdc++-v3/include/type_traits: In instantiation of 
'struct std::is_nothrow_move_constructible':
/S/gcc/testsuite/g++.dg/cpp0x/noexcept15.C:14:5:   required from 
'single::single(single&&) [with Tp = Blob]'
/S/gcc/testsuite/g++.dg/cpp0x/noexcept15.C:23:51:   required from 'constexpr single::type> make_single(Tp&&) [with Tp =
Blob&; typename std::decay<_Tp>::type = Blob]'
/S/gcc/testsuite/g++.dg/cpp0x/noexcept15.C:31:18:   required from here
/B/aarch64-none-linux-gnu/libstdc++-v3/include/type_traits::52: error: 
static assertion failed: template argument must be a complete class
or an unbounded array


Yes, see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90695





[PATCH] Add noexcept to tuple<> and simplify tuple noexcept-specifiers

2019-05-31 Thread Jonathan Wakely

* include/std/tuple (tuple<>): Add noexcept to allocator-extended
constructors.
(tuple::__nothrow_default_constructible()): New helper
function.
(tuple::tuple(), explicit tuple::tuple()): Use helper.

Tested powerpc64le-linux, committed to trunk.

commit d099e922a9b5ca48bed5a1fa3fc5977dbdb0f070
Author: Jonathan Wakely 
Date:   Fri May 31 11:52:47 2019 +0100

Add noexcept to tuple<> and simplify tuple noexcept-specifiers

* include/std/tuple (tuple<>): Add noexcept to allocator-extended
constructors.
(tuple::__nothrow_default_constructible()): New helper
function.
(tuple::tuple(), explicit tuple::tuple()): Use 
helper.

diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index b81157c097b..64516b1dece 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -898,9 +898,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   tuple() = default;
   // No-op allocator constructors.
   template
-   tuple(allocator_arg_t, const _Alloc&) { }
+   tuple(allocator_arg_t, const _Alloc&) noexcept { }
   template
-   tuple(allocator_arg_t, const _Alloc&, const tuple&) { }
+   tuple(allocator_arg_t, const _Alloc&, const tuple&) noexcept { }
 };
 
   /// Partial specialization, 2-element tuple.
@@ -925,11 +925,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
 
   template
-static constexpr bool __nothrow_constructible()
-{
-  return __and_,
-   is_nothrow_constructible<_T2, _U2>>::value;
-}
+   static constexpr bool __nothrow_constructible()
+   {
+ return __and_,
+   is_nothrow_constructible<_T2, _U2>>::value;
+   }
+
+  static constexpr bool __nothrow_default_constructible()
+  {
+   return __and_,
+ is_nothrow_default_constructible<_T2>>::value;
+  }
 
 public:
   template >
::value, bool>::type = true>
constexpr tuple()
-   noexcept(__and_,
-   is_nothrow_default_constructible<_T2>>::value)
+   noexcept(__nothrow_default_constructible())
: _Inherited() { }
 
   template >>>
   ::value, bool>::type = false>
explicit constexpr tuple()
-   noexcept(__and_,
-   is_nothrow_default_constructible<_T2>>::value)
+   noexcept(__nothrow_default_constructible())
: _Inherited() { }
 
   // Shortcut for the cases where constructors taking _T1, _T2
@@ -1108,7 +1112,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
  && _TCC<_Dummy>::template
_ImplicitlyConvertibleTuple<_T1, _T2>(),
bool>::type=true>
-
tuple(allocator_arg_t __tag, const _Alloc& __a,
  const _T1& __a1, const _T2& __a2)
: _Inherited(__tag, __a, __a1, __a2) { }