Title
scoped_allocator_adaptor piecewise construction does not require CopyConstructible
Status
resolved
Section
[allocator.adaptor.members]
Submitter
David Krauss

Created on 2015-06-16.00:00:00 last changed 71 months ago

Messages

Date: 2018-06-12.01:09:52

[ 2018-06 set to 'Resolved' ]

P0475R1 was adopted in Rapperswil.

Date: 2016-11-15.00:00:00

[ 2016-11-08, Jonathan comments ]

My paper P0475R0 provides a proposed resolution.

Date: 2015-06-16.00:00:00

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

History
Date User Action Args
2018-06-12 01:09:52adminsetmessages: + msg9894
2018-06-12 01:09:52adminsetstatus: new -> resolved
2016-11-08 19:12:49adminsetmessages: + msg8580
2015-06-16 00:00:00admincreate