mirror of
https://github.com/boostorg/compat.git
synced 2026-01-29 07:22:18 +00:00
73 lines
1.9 KiB
Plaintext
73 lines
1.9 KiB
Plaintext
////
|
|
Copyright 2024 Ruben Perez Hidalgo
|
|
Distributed under the Boost Software License, Version 1.0.
|
|
https://www.boost.org/LICENSE_1_0.txt
|
|
////
|
|
|
|
[#to_array]
|
|
# <boost/compat/to_array.hpp>
|
|
:idprefix: ref_to_array_
|
|
|
|
## Description
|
|
|
|
The header `<boost/compat/to_array.hpp>` implements, in a portable way, the C++20
|
|
`std::to_array` function, present in the `<array>` header.
|
|
|
|
`to_array` creates a `std::array` from a single-dimensional C array,
|
|
performing an element-wise copy or move.
|
|
|
|
## Example
|
|
|
|
```cpp
|
|
int input [] = {1, 2, 3};
|
|
std::array<int, 3> output = boost::compat::to_array(input);
|
|
assert((
|
|
output == std::array<int, 3>{{1, 2, 3}}
|
|
));
|
|
```
|
|
|
|
## Synopsis
|
|
|
|
```cpp
|
|
namespace boost
|
|
{
|
|
namespace compat
|
|
{
|
|
|
|
template <class T, std::size_t N>
|
|
constexpr std::array<remove_cv_t<T>, N> to_array(T (&a)[N]);
|
|
|
|
template <class T, std::size_t N>
|
|
constexpr std::array<remove_cv_t<T>, N> to_array(T (&&a)[N]);
|
|
|
|
} // namespace compat
|
|
} // namespace boost
|
|
```
|
|
|
|
## to_array
|
|
|
|
```cpp
|
|
template <class T, std::size_t N>
|
|
constexpr std::array<remove_cv_t<T>, N> to_array(T (&&a)[N]);
|
|
```
|
|
|
|
[horizontal]
|
|
Effects:;; Creates an array of `N` elements by copying elements in `a`.
|
|
For every `i` in `0, ..., N-1`, copy-initializes the i-th element
|
|
in the output array from `a[i]`.
|
|
Type requirements:;; `std::is_constructible_v<remove_cv_t<T>, T&> && !std::is_array_v<T>`.
|
|
Otherwise, the overload is ill-formed.
|
|
|
|
|
|
```cpp
|
|
template <class T, std::size_t N>
|
|
constexpr std::array<remove_cv_t<T>, N> to_array(T (&a)[N]);
|
|
```
|
|
|
|
[horizontal]
|
|
Effects:;; Creates an array of `N` elements by moving elements in `a`.
|
|
For every `i` in `0, ..., N-1`, move-initializes the i-th element
|
|
in the output array from `std::move(a[i])`.
|
|
Type requirements:;; `std::is_constructible_v<remove_cv_t<T>, T&&> && !std::is_array_v<T>`.
|
|
Otherwise, the overload is ill-formed.
|