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... |