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.
to_array
should take rvalue reference as wellSection: 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.
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
, aAnarray<remove_cv_t<T>, N>
such that each element is copy-initialized with the corresponding element ofinitialized witha
{ 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: