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

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Author: redi
Date: Fri Aug 17 17:52:49 2018
New Revision: 263625

URL: https://gcc.gnu.org/viewcvs?rev=263625&root=gcc&view=rev
Log:
PR libstdc++/86963 Implement LWG 2729 constraints on tuple assignment

        PR libstdc++/86963
        * include/std/tuple (__tuple_base): New class template with deleted
        copy assignment operator.
        (tuple, tuple<_T1, _T2>): Derive from __tuple_base<tuple> so that
        implicit copy/move assignment operator will be deleted/suppressed.
        (tuple::__assignable, tuple<_T1, _T2>::__assignable): New helper
        functions for SFINAE constraints on assignment operators.
        (tuple::__nothrow_assignable, tuple<_T1, _T2>::__nothrow_assignable):
        New helper functions for exception specifications.
        (tuple::operator=(const tuple&), tuple::operator=(tuple&&))
        (tuple<_T1, _T2>::operator=(const tuple&))
        (tuple<_T1, _T2>::operator=(tuple&&)): Change parameter types to
        __nonesuch_no_braces when the operator should be defined implicitly.
        Use __nothrow_assignable for exception specifications.
        (tuple::operator=(const tuple<_UElements...>&))
        (tuple::operator=(tuple<_UElements...>&&))
        (tuple<_T1, _T2>::operator=(const tuple<_U1, _U2>&))
        (tuple<_T1, _T2>::operator=(tuple<_U1, _U2>&&))
        (tuple<_T1, _T2>::operator=(const pair<_U1, _U2>&))
        (tuple<_T1, _T2>::operator=(pair<_U1, _U2>&&)): Constrain using
        __assignable and use __nothrow_assignable for exception
        specifications.
        * python/libstdcxx/v6/printers.py (is_specialization_of): Accept
        gdb.Type as first argument, instead of a string.
        (StdTuplePrinter._iterator._is_nonempty_tuple): New method to check
        tuple for expected structure.
        (StdTuplePrinter._iterator.__init__): Use _is_nonempty_tuple.
        * testsuite/20_util/tuple/dr2729.cc: New test.
        * testsuite/20_util/tuple/element_access/get_neg.cc: Change dg-error
        to dg-prune-output.

Added:
    trunk/libstdc++-v3/testsuite/20_util/tuple/dr2729.cc
Modified:
    trunk/libstdc++-v3/ChangeLog
    trunk/libstdc++-v3/include/std/tuple
    trunk/libstdc++-v3/python/libstdcxx/v6/printers.py
    trunk/libstdc++-v3/testsuite/20_util/tuple/element_access/get_neg.cc

Reply via email to