Section: 126.96.36.199 [allocator.uses.construction] Status: WP Submitter: Tim Song Opened: 2021-02-27 Last modified: 2021-06-07 16:58:04 UTC
Priority: Not Prioritized
View all other issues in [allocator.uses.construction].
View all issues with WP status.
For an rvalue pair pr, uses_allocator_construction_args is specified to forward std::move(pr).first and std::move(pr).second. This is correct for non-references and lvalue references, but wrong for rvalue refrences because the class member access produces an lvalue (see 188.8.131.52 [expr.ref]/6). get produces an xvalue, which is what is desired here.
[2021-03-12; Reflector poll]
Set status to Tentatively Ready after five votes in favour during reflector poll.
[2021-06-07 Approved at June 2021 virtual plenary. Status changed: Voting → WP.]
This wording is relative to N4878.
Edit 184.108.40.206 [allocator.uses.construction] as indicated:
template<class T, class Alloc, class U, class V> constexpr auto uses_allocator_construction_args(const Alloc& alloc, pair<U, V>&& pr) noexcept -> see below;
[…]-15- Effects: Equivalent to:return uses_allocator_construction_args<T>(alloc, piecewise_construct, forward_as_tuple(
std::move(pr).first), forward_as_tuple( std::move(pr).second));