#ifndef CORE_ARRAY_HPP #define CORE_ARRAY_HPP #include #include #include #include #include namespace core { inline namespace v2 { template constexpr auto make_array (Args&&... args) -> ::std::array< meta::either< meta::all< ::std::is_void::value, meta::none_of, is_reference_wrapper>() >(), common_type_t, V >, sizeof...(Args) > { return {{ core::forward(args)... }}; } template constexpr auto to_array (T (&array)[N], index_sequence) -> ::std::array< remove_cv_t, N > { return {{ array[Is]... }}; } template constexpr auto to_array (T (&array)[N]) -> ::std::array, N> { return (to_array)(array, make_index_sequence { }); } }} /* namespace core::v2 */ #endif /* CORE_ARRAY_HPP */