1 // Copyright 2020 The Pigweed Authors
3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4 // use this file except in compliance with the License. You may obtain a copy of
7 // https://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 // License for the specific language governing permissions and limitations under
17 #include <type_traits>
20 #include "pw_polyfill/standard_library/namespace.h"
22 #ifndef __cpp_lib_to_array
23 #define __cpp_lib_to_array 201907L
25 _PW_POLYFILL_BEGIN_NAMESPACE_STD
29 template <typename T, size_t size, size_t... indices>
30 constexpr array<remove_cv_t<T>, size> CopyArray(const T (&values)[size],
31 index_sequence<indices...>) {
32 return {{values[indices]...}};
35 template <typename T, size_t size, size_t... indices>
36 constexpr array<remove_cv_t<T>, size> MoveArray(T(&&values)[size],
37 index_sequence<indices...>) {
38 return {{move(values[indices])...}};
43 template <typename T, size_t size>
44 constexpr array<remove_cv_t<T>, size> to_array(T (&values)[size]) {
45 return impl::CopyArray(values, make_index_sequence<size>{});
48 template <typename T, size_t size>
49 constexpr array<remove_cv_t<T>, size> to_array(T(&&values)[size]) {
50 return impl::MoveArray(move(values), make_index_sequence<size>{});
53 _PW_POLYFILL_END_NAMESPACE_STD
55 #endif // __cpp_lib_to_array