Tatooine
make_array.h
Go to the documentation of this file.
1#ifndef TATOOINE_MAKE_ARRAY_H
2#define TATOOINE_MAKE_ARRAY_H
3//==============================================================================
5
6#include <array>
7//==============================================================================
8namespace tatooine {
9//==============================================================================
10template <typename T, size_t... Is>
11constexpr auto make_array(T&& default_data, std::index_sequence<Is...> /*is*/) {
12 return std::array<std::decay_t<T>, sizeof...(Is)>{
13 ((void)Is, default_data)...};
14}
15//------------------------------------------------------------------------------
16template <typename T, typename... Data>
17constexpr auto make_array(Data&&... data) {
18 return std::array<T, sizeof...(Data)>{static_cast<T>(data)...};
19}
20//------------------------------------------------------------------------------
21template <typename T, size_t N>
22constexpr auto make_array() {
23 return make_array(T{}, std::make_index_sequence<N>{});
24}
25//------------------------------------------------------------------------------
26template <size_t N, typename T>
27constexpr auto make_array(T&& default_data) {
28 return make_array(default_data, std::make_index_sequence<N>{});
29}
30//------------------------------------------------------------------------------
31template <typename T, size_t N>
32constexpr auto make_array(std::array<T, N> const& data) {
33 return invoke_unpacked([](auto&&... data) { return make_array<T>(data...); },
34 unpack(data));
35}
36//==============================================================================
37} // namespace tatooine
38//==============================================================================
39#endif
Definition: algorithm.h:6
constexpr auto make_array()
Definition: make_array.h:22
constexpr decltype(auto) invoke_unpacked(F &&f)
All arguments are bound -> just call f.
Definition: invoke_unpacked.h:15
Definition: invoke_unpacked.h:11