Because uses-allocator construction is invariably done with a const lvalue the __uses_alloc helper should use a const lvalue for the is_constructible checks. Otherwise, it can detect that the type can be constructed from an rvalue, and then an error happens when a const lvalue is passed to the constructor instead. Prior to LWG DR 2586 scoped_allocator_adaptor incorrectly used an rvalue type in the is_constructible check and then used a non-const lvalue for the actual construction. The other components using uses-allocator construction (tuple and polymorphic_allocator) have always done so with a const lvalue allocator, although the use of __use_alloc in our implementation meant they behaved the same as scoped_allocator_adaptor and incorrectly used rvalues for the is_constructible checks. In C++20 the P0591R4 changes mean that all uses-allocator construction is defined in terms of the new uses_allocator_construction_args functions, which always use a const lvalue allocator. The changes in this patch ensure that the __use_alloc helper correctly matches the requirements in the standard, consistently using a const lvalue allocator for the is_constructible checks and the actual constructor arguments. * doc/xml/manual/intro.xml: Document LWG 2586 status. * include/bits/uses_allocator.h (__uses_alloc): Use const lvalue allocator type in is_constructible checks. * testsuite/20_util/scoped_allocator/69293_neg.cc: Adjust dg-error. * testsuite/20_util/scoped_allocator/dr2586.cc: New test. * testsuite/20_util/tuple/cons/allocators.cc: Add test using problematic type from LWG 2586 discussion. * testsuite/20_util/uses_allocator/69293_neg.cc: Adjust dg-error. * testsuite/20_util/uses_allocator/cons_neg.cc: Likewise. From-SVN: r268882
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
apply | Loading commit data... | |
comparison_operators | Loading commit data... | |
cons | Loading commit data... | |
creation_functions | Loading commit data... | |
element_access | Loading commit data... | |
make_from_tuple | Loading commit data... | |
requirements | Loading commit data... | |
48476.cc | Loading commit data... | |
51365.cc | Loading commit data... | |
53648.cc | Loading commit data... | |
56785.cc | Loading commit data... | |
60497.cc | Loading commit data... | |
61947.cc | Loading commit data... | |
67844.cc | Loading commit data... | |
77395.cc | Loading commit data... | |
77802.cc | Loading commit data... | |
78939.cc | Loading commit data... | |
cv_tuple_element.cc | Loading commit data... | |
cv_tuple_size.cc | Loading commit data... | |
cv_tuple_size_neg.cc | Loading commit data... | |
dr2729.cc | Loading commit data... | |
moveable.cc | Loading commit data... | |
moveable2.cc | Loading commit data... | |
noexcept_move_assign.cc | Loading commit data... | |
noexcept_swap.cc | Loading commit data... | |
swap.cc | Loading commit data... | |
swap_cxx17.cc | Loading commit data... | |
tuple_element.cc | Loading commit data... | |
tuple_element_t.cc | Loading commit data... | |
tuple_size.cc | Loading commit data... | |
tuple_size_v.cc | Loading commit data... |