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

### 3140. `COMMON_REF` is unimplementable as specified

Section: 21.3.8.7 [meta.trans.other] Status: C++20 Submitter: Casey Carter Opened: 2018-07-07 Last modified: 2021-02-25

Priority: 0

View all other issues in [meta.trans.other].

View all issues with C++20 status.

Discussion:

21.3.8.7 [meta.trans.other]/3.2 states:

> [Let] `XREF(A)` denote a unary class template `T` such that `T<U>` denotes the same type as `U` with the addition of `A`’s cv and reference qualifiers, for a non-reference cv-unqualified type `U`,

which is nonsensical: a specialization of a class template cannot possibly be a cv-qualified type or reference type. `XREF(A)` must be a unary alias template.

[2018-09-11; Status set to Tentatively Ready after five positive votes on the reflector]

[2018-11, Adopted in San Diego]

Proposed resolution:

This wording is relative to N4762.

Change 21.3.8.7 [meta.trans.other] as indicated:

> -3- Let:

> > (3.1) — `CREF(A)` be `add_lvalue_reference_t<const remove_reference_t<A>>`,

> > (3.2) — `XREF(A)` denote a unary class alias template `T` such that `T<U>` denotes the same type as `U` with the addition of `A`’s cv and reference qualifiers, for a non-reference cv-unqualified type `U`,

> > (3.3) — `COPYCV(FROM, TO)` be an alias for type `TO` with the addition of `FROM`’s top-level cv-qualifiers. [Example: `COPYCV(const int, volatile short)` is an alias for `const volatile short`. —end example]