libstdc++: Fix <ext/pointer.h> incompatibilities with C++20
authorJonathan Wakely <jwakely@redhat.com>
Thu, 9 Jan 2020 21:31:55 +0000 (21:31 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 9 Jan 2020 21:31:55 +0000 (21:31 +0000)
commit1a7886386cea722d0d7b61730b4d1dd6d9a19109
tree64790bbbe31216714a01e9328debb4b49a4a1040
parentcaa39b2e842b03226551231688ef7190cbe44f89
libstdc++: Fix <ext/pointer.h> incompatibilities with C++20

The equality operators for _ExtPtr_allocator are defined as non-const
member functions, which causes ambiguities in C++20 due to the
synthesized operator!= candidates. They should always have been const.

The _Pointer_adapter class template has both value_type and element_type
members, which makes readable_traits<_Pointer_adapter<T>> ambiguous. The
intended workaround is to add a specialization of readable_traits.

* include/ext/extptr_allocator.h (_ExtPtr_allocator::operator==)
(_ExtPtr_allocator::operator!=): Add missing const qualifiers.
* include/ext/pointer.h (readable_traits<_Pointer_adapter<S>>): Add
partial specialization to disambiguate the two constrained
specializations.

From-SVN: r280067
libstdc++-v3/ChangeLog
libstdc++-v3/include/ext/extptr_allocator.h
libstdc++-v3/include/ext/pointer.h