Skip to content

Commit 0c4c460

Browse files
authored
Remove use of deleted std::allocator members (#177)
std::allocator::pointer, reference, max_size, etc. were deleted in C++20. Uses of rebind have already been removed from s2geometry. https://en.cppreference.com/w/cpp/memory/allocator https://en.cppreference.com/w/cpp/memory/allocator_traits Fixes #173.
1 parent d72715f commit 0c4c460

3 files changed

Lines changed: 38 additions & 33 deletions

File tree

src/s2/third_party/absl/container/fixed_array.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,13 @@ class FixedArray {
106106

107107
public:
108108
using allocator_type = typename AllocatorTraits::allocator_type;
109-
using value_type = typename allocator_type::value_type;
110-
using pointer = typename allocator_type::pointer;
111-
using const_pointer = typename allocator_type::const_pointer;
112-
using reference = typename allocator_type::reference;
113-
using const_reference = typename allocator_type::const_reference;
114-
using size_type = typename allocator_type::size_type;
115-
using difference_type = typename allocator_type::difference_type;
109+
using value_type = typename AllocatorTraits::value_type;
110+
using pointer = typename AllocatorTraits::pointer;
111+
using const_pointer = typename AllocatorTraits::const_pointer;
112+
using reference = value_type&;
113+
using const_reference = const value_type&;
114+
using size_type = typename AllocatorTraits::size_type;
115+
using difference_type = typename AllocatorTraits::difference_type;
116116
using iterator = pointer;
117117
using const_iterator = const_pointer;
118118
using reverse_iterator = std::reverse_iterator<iterator>;

src/s2/third_party/absl/container/inlined_vector.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,17 +85,18 @@ class InlinedVector {
8585
using IteratorCategory =
8686
typename std::iterator_traits<Iterator>::iterator_category;
8787

88+
using AllocatorTraits = std::allocator_traits<A>;
8889
using rvalue_reference = typename A::value_type&&;
8990

9091
public:
91-
using allocator_type = A;
92-
using value_type = typename allocator_type::value_type;
93-
using pointer = typename allocator_type::pointer;
94-
using const_pointer = typename allocator_type::const_pointer;
95-
using reference = typename allocator_type::reference;
96-
using const_reference = typename allocator_type::const_reference;
97-
using size_type = typename allocator_type::size_type;
98-
using difference_type = typename allocator_type::difference_type;
92+
using allocator_type = typename AllocatorTraits::allocator_type;
93+
using value_type = typename AllocatorTraits::value_type;
94+
using pointer = typename AllocatorTraits::pointer;
95+
using const_pointer = typename AllocatorTraits::const_pointer;
96+
using reference = value_type&;
97+
using const_reference = const value_type&;
98+
using size_type = typename AllocatorTraits::size_type;
99+
using difference_type = typename AllocatorTraits::difference_type;
99100
using iterator = pointer;
100101
using const_iterator = const_pointer;
101102
using reverse_iterator = std::reverse_iterator<iterator>;

src/s2/util/gtl/densehashtable.h

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ struct dense_hashtable_iterator {
184184
private:
185185
using value_alloc_type =
186186
typename std::allocator_traits<A>::template rebind_alloc<V>;
187+
using value_alloc_traits = std::allocator_traits<value_alloc_type>;
187188

188189
public:
189190
typedef dense_hashtable_iterator<V, K, HF, ExK, SetK, EqK, A>
@@ -192,11 +193,11 @@ struct dense_hashtable_iterator {
192193
const_iterator;
193194

194195
typedef std::forward_iterator_tag iterator_category; // very little defined!
195-
typedef V value_type;
196-
typedef typename value_alloc_type::difference_type difference_type;
197-
typedef typename value_alloc_type::size_type size_type;
198-
typedef typename value_alloc_type::reference reference;
199-
typedef typename value_alloc_type::pointer pointer;
196+
typedef typename value_alloc_traits::value_type value_type;
197+
typedef typename value_alloc_traits::difference_type difference_type;
198+
typedef typename value_alloc_traits::size_type size_type;
199+
typedef value_type& reference;
200+
typedef typename value_alloc_traits::pointer pointer;
200201

201202
// "Real" constructor and default constructor
202203
dense_hashtable_iterator(
@@ -248,6 +249,7 @@ struct dense_hashtable_const_iterator {
248249
private:
249250
using value_alloc_type =
250251
typename std::allocator_traits<A>::template rebind_alloc<V>;
252+
using value_alloc_traits = std::allocator_traits<value_alloc_type>;
251253

252254
public:
253255
typedef dense_hashtable_iterator<V, K, HF, ExK, SetK, EqK, A>
@@ -256,11 +258,11 @@ struct dense_hashtable_const_iterator {
256258
const_iterator;
257259

258260
typedef std::forward_iterator_tag iterator_category; // very little defined!
259-
typedef V value_type;
260-
typedef typename value_alloc_type::difference_type difference_type;
261-
typedef typename value_alloc_type::size_type size_type;
262-
typedef typename value_alloc_type::const_reference reference;
263-
typedef typename value_alloc_type::const_pointer pointer;
261+
typedef typename value_alloc_traits::value_type value_type;
262+
typedef typename value_alloc_traits::difference_type difference_type;
263+
typedef typename value_alloc_traits::size_type size_type;
264+
typedef const value_type& reference;
265+
typedef typename value_alloc_traits::const_pointer pointer;
264266

265267
// "Real" constructor and default constructor
266268
dense_hashtable_const_iterator(
@@ -315,7 +317,7 @@ class dense_hashtable {
315317
private:
316318
using value_alloc_type =
317319
typename std::allocator_traits<Alloc>::template rebind_alloc<Value>;
318-
320+
using value_alloc_traits = std::allocator_traits<value_alloc_type>;
319321

320322
public:
321323
typedef Key key_type;
@@ -324,12 +326,12 @@ class dense_hashtable {
324326
typedef EqualKey key_equal;
325327
typedef Alloc allocator_type;
326328

327-
typedef typename value_alloc_type::size_type size_type;
328-
typedef typename value_alloc_type::difference_type difference_type;
329-
typedef typename value_alloc_type::reference reference;
330-
typedef typename value_alloc_type::const_reference const_reference;
331-
typedef typename value_alloc_type::pointer pointer;
332-
typedef typename value_alloc_type::const_pointer const_pointer;
329+
typedef typename value_alloc_traits::size_type size_type;
330+
typedef typename value_alloc_traits::difference_type difference_type;
331+
typedef value_type& reference;
332+
typedef const value_type& const_reference;
333+
typedef typename value_alloc_traits::pointer pointer;
334+
typedef typename value_alloc_traits::const_pointer const_pointer;
333335
typedef dense_hashtable_iterator<Value, Key, HashFcn,
334336
ExtractKey, SetKey, EqualKey, Alloc>
335337
iterator;
@@ -578,7 +580,9 @@ class dense_hashtable {
578580
// FUNCTIONS CONCERNING SIZE
579581
public:
580582
size_type size() const { return num_elements - num_deleted; }
581-
size_type max_size() const { return get_allocator().max_size(); }
583+
size_type max_size() const {
584+
return value_alloc_traits::max_size(get_allocator());
585+
}
582586
bool empty() const { return size() == 0; }
583587
size_type bucket_count() const { return num_buckets; }
584588
size_type max_bucket_count() const { return max_size(); }

0 commit comments

Comments
 (0)