decay
incompletely specifiedSection: 21.3.8.7 [meta.trans.other] Status: CD1 Submitter: Thorsten Ottosen Opened: 2007-07-08 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [meta.trans.other].
View all issues with CD1 status.
Discussion:
The current working draft has a type-trait decay
in 21.3.8.7 [meta.trans.other].
Its use is to turn C++03 pass-by-value parameters into efficient C++0x pass-by-rvalue-reference parameters. However, the current definition introduces an incompatible change where the cv-qualification of the parameter type is retained. The deduced type should loose such cv-qualification, as pass-by-value does.
Proposed resolution:
In 21.3.8.7 [meta.trans.other] change the last sentence:
Otherwise the member typedef
type
equalsremove_cv<U>::type
.
In 22.4.5 [tuple.creation]/1 change:
where eachLetVi
inVTypes
isX&
if, for the corresponding typeTi
inTypes
,remove_cv<remove_reference<Ti>::type>::type
equalsreference_wrapper<X>
, otherwiseVi
isdecay<Ti>::type
.Ui
bedecay<Ti>::type
for eachTi
inTypes
. Then eachVi
inVTypes
isX&
ifUi
equalsreference_wrapper<X>
, otherwiseVi
isUi
.