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