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

--- Comment #21 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>:

https://gcc.gnu.org/g:b8018e5c5ec0e9b6948182f13fba47c67b758d8a

commit r12-5532-gb8018e5c5ec0e9b6948182f13fba47c67b758d8a
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Thu Nov 25 16:49:45 2021 +0000

    libstdc++: Make std::pointer_traits SFINAE-friendly [PR96416]

    This implements the resolution I'm proposing for LWG 3545, to avoid hard
    errors when using std::to_address for types that make pointer_traits
    ill-formed.

    Consistent with std::iterator_traits, instantiating std::pointer_traits
    for a non-pointer type will be well-formed, but give an empty type with
    no member types. This avoids the problematic cases for std::to_address.
    Additionally, the pointer_to member is now only declared when the
    element type is not cv void (and for C++20, when the function body would
    be well-formed). The rebind member was already SFINAE-friendly in our
    implementation.

    libstdc++-v3/ChangeLog:

            PR libstdc++/96416
            * include/bits/ptr_traits.h (pointer_traits): Reimplement to be
            SFINAE-friendly (LWG 3545).
            * testsuite/20_util/pointer_traits/lwg3545.cc: New test.
            * testsuite/20_util/to_address/1_neg.cc: Adjust dg-error line.
            * testsuite/20_util/to_address/lwg3545.cc: New test.

Reply via email to