libstdc++: Make COW string use allocator_traits for nested types
authorJonathan Wakely <jwakely@redhat.com>
Thu, 30 Jul 2020 19:58:09 +0000 (20:58 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Thu, 30 Jul 2020 19:58:09 +0000 (20:58 +0100)
When compiled as C++20 the COW std::string fails due to assuming that
the allocator always defines size_type and difference_type. That has
been incorrect since C++11, but we got away with it for specializations
using std::allocator until those members were removed in C++20.

libstdc++-v3/ChangeLog:

* include/bits/basic_string.h (size_type, difference_type):
Use allocator_traits to obtain the allocator's size_type and
difference_type.

libstdc++-v3/include/bits/basic_string.h

index bc0c256..52cecdd 100644 (file)
@@ -3147,8 +3147,8 @@ _GLIBCXX_END_NAMESPACE_CXX11
       typedef _Traits                                      traits_type;
       typedef typename _Traits::char_type                  value_type;
       typedef _Alloc                                       allocator_type;
-      typedef typename _CharT_alloc_type::size_type        size_type;
-      typedef typename _CharT_alloc_type::difference_type   difference_type;
+      typedef typename _CharT_alloc_traits::size_type      size_type;
+      typedef typename _CharT_alloc_traits::difference_type difference_type;
 #if __cplusplus < 201103L
       typedef typename _CharT_alloc_type::reference        reference;
       typedef typename _CharT_alloc_type::const_reference   const_reference;