This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of Resolved status.

### 2511. `scoped_allocator_adaptor` piecewise construction does not require `CopyConstructible`

Section: 20.5.4 [allocator.adaptor.members] Status: Resolved Submitter: David Krauss Opened: 2015-06-16 Last modified: 2020-09-06

Priority: 3

View all other issues in [allocator.adaptor.members].

View all issues with Resolved status.

Discussion:

20.5.4 [allocator.adaptor.members]/10 requires that the argument types in the piecewise-construction tuples all be `CopyConstructible`. These tuples are typically created by `std::forward_as_tuple`, such as in ¶13. So they will be a mix of lvalue and rvalue references, the latter of which are not `CopyConstructible`.

My guess is that `CopyConstructible` was specified to feed the `tuple_cat`, before that function could handle rvalues. Since the argument tuple is already moved in ¶11, the requirement is obsolete. It should either be changed to `MoveConstructible`, or perhaps better, convert the whole tuple to references (i.e. form `tuple<Args1&&...>`) so nothing needs to be moved. After all, this is a facility for handling non-movable types.

It appears that the resolution of DR 2203, which added `std::move` to ¶11, simply omitted the change to ¶10.

[2016-11-08, Jonathan comments]

My paper P0475R0 provides a proposed resolution.

[2018-06 set to 'Resolved']

P0475R1 was adopted in Rapperswil.

Proposed resolution: