This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of Resolved status.
Section: 4.2.1 [fund.ts.v2::func.wrap.func.con] Status: Resolved Submitter: Zhihao Yuan Opened: 2016-11-07 Last modified: 2020-09-06
Priority: 3
View all other issues in [fund.ts.v2::func.wrap.func.con].
View all issues with Resolved status.
Discussion:
Addresses: fund.ts.v2
C++ doesn't have a prvalue expression of array type, but rvalue arrays can still come from different kinds of sources:
C99 compound literals (int[]) {2, 4},
std::move(arr),
Deduction to_array<int const>({ 2, 4 }).
See also CWG 1591: Deducing array bound and element type from initializer list.
For 3), users are "abusing" to_array to get access to uniform initialization to benefit from initializing elements through braced-init-list and/or better narrowing conversion support.
We should just add rvalue reference support to to_array.[Issues Telecon 16-Dec-2016]
Status to LEWG
[2017-02 in Kona, LEWG responds]
Would like a small paper; see examples before and after. How does this affect overload resolution?
[2017-06-02 Issues Telecon]
Leave status as LEWG; priority 3
Previous resolution [SUPERSEDED]:This wording is relative to N4600.
Add the following signature to 9.2.1 [fund.ts.v2::header.array.synop]:
// 9.2.2, Array creation functions template <class D = void, class... Types> constexpr array<VT, sizeof...(Types)> make_array(Types&&... t); template <class T, size_t N> constexpr array<remove_cv_t<T>, N> to_array(T (&a)[N]); template <class T, size_t N> constexpr array<remove_cv_t<T>, N> to_array(T (&&a)[N]);Modify 9.2.2 [fund.ts.v2::container.array.creation] as follows:
template <class T, size_t N> constexpr array<remove_cv_t<T>, N> to_array(T (&a)[N]); template <class T, size_t N> constexpr array<remove_cv_t<T>, N> to_array(T (&&a)[N]);-6- Returns: For all i, 0 ≤ i < N, a
An array<remove_cv_t<T>, N>such that each element is copy-initialized with the corresponding element of ainitialized with { a[i]... } for the first form, or { std::move(a[i])... } for the second form..
[2020-05-10; Reflector discussions]
Resolved by adoption of P0325R4 and P2081R1.
Rationale:
Resolved by P0325R4 and P2081R1.Proposed resolution: