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

### 705. type-trait `decay` incompletely specified

Section: 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` equals `remove_cv<U>::type`.

In 22.4.5 [tuple.creation]/1 change:

> where each `Vi` in `VTypes` is `X&` if, for the corresponding type `Ti` in `Types`, `remove_cv<remove_reference<Ti>::type>::type` equals `reference_wrapper<X>`, otherwise `Vi` is `decay<Ti>::type`. Let `Ui` be `decay<Ti>::type` for each `Ti` in `Types`. Then each `Vi` in `VTypes` is `X&` if `Ui` equals `reference_wrapper<X>`, otherwise `Vi` is `Ui`.