std::experimental::make_array

From cppreference.com
Defined in header <experimental/array>
template <class D = void, class... Types>
constexpr std::array<VT /* see below */, sizeof...(Types)> make_array(Types&&... t);
(library fundamentals TS v2)

Creates a std::array whose size is equal to the number of arguments and whose elements are initialized from the corresponding arguments. Returns std::array<VT, sizeof...(Types)>{std::forward<Types>(t)...}

If D is void, then the deduced type VT is std::common_type_t<Types...>. Otherwise, it is D.

If D is void and any of std::decay_t<Types>... is a specialization of std::reference_wrapper, the program is ill-formed.

Possible implementation

namespace details {
  template<class> struct is_ref_wrapper : std::false_type {};
  template<class T> struct is_ref_wrapper<std::reference_wrapper<T>> : std::true_type {};
 
  template<class T>
  using not_ref_wrapper = std::experimental::negation<is_ref_wrapper<std::decay_t<T>>>;
 
  template <class D, class...> struct return_type_helper { using type = D; };
  template <class... Types>
  struct return_type_helper<void, Types...> : std::common_type<Types...> {
      static_assert(std::experimental::conjunction_v<not_ref_wrapper<Types>...>,
                    "Types cannot contain reference_wrappers when D is void");
  };
 
  template <class D, class... Types>
  using return_type = std::array<typename return_type_helper<D, Types...>::type,
                                 sizeof...(Types)>;
}
 
template < class D = void, class... Types>
constexpr details::return_type<D, Types...> make_array(Types&&... t) {
  return {std::forward<Types>(t)... };
}

Example

#include <experimental/array>
#include <iostream>
#include <type_traits>
 
int main()
{
    decltype(auto) arr = std::experimental::make_array(1, 2, 3, 4, 5);
    bool is_array_of_5_ints = std::is_same<decltype(arr), std::array<int, 5>>::value;
    std::cout << "Returns an array of five ints? ";
    std::cout << std::boolalpha << is_array_of_5_ints << '\n';
}

Output:

Returns an array of five ints? true

See also

Creates a std::array object from a built-in array
(function template)
This site archives manuals. You are looking at an archived manual.
If you're looking for this specific version of this manual, you're in the right place. Otherwise, please check the version.