https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86963

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Author: redi
Date: Mon Aug 20 13:53:56 2018
New Revision: 263661

URL: https://gcc.gnu.org/viewcvs?rev=263661&root=gcc&view=rev
Log:
PR libstdc++/86963 Remove use of __tuple_base in std::tuple

The _Tuple_impl base class can be used to disable copy/move assignment,
without requiring an extra base class.

Exception specifications on std::tuple assignment and swap functions can
be defined directly using is_nothrow_swappable, instead of querying the
base classes.

        PR libstdc++/86963
        * include/std/tuple (_Tuple_impl::operator=): Define as deleted.
        (_Tuple_impl::_M_assign): New functions to perform assignment instead
        of assignment operators.
        (_Tuple_impl::_M_swap): Remove exception specification.
        (_Tuple_impl<_Idx, _Head>): Likewise.
        (_TC::_NonNestedTuple, _TC::_NotSameTuple): Use __remove_cvref_t.
        (__tuple_base): Remove.
        (tuple, tuple<_T1, _T2>): Remove inheritance from __tuple_base.
        (tuple::operator=, tuple<_T1, _T2>::operator=): Call _M_assign.
        (tuple::swap, tuple<_T1, _T2>::swap): Define exception specification
        using __is_nothrow_swappable.
        (tuple<_T1, _T2>::tuple(_U1&&, _U2&&)): Use __remove_cvref_t.

Modified:
    trunk/libstdc++-v3/ChangeLog
    trunk/libstdc++-v3/include/std/tuple

Reply via email to