30 #ifndef _GLIBCXX_EXPERIMENTAL_ARRAY
31 #define _GLIBCXX_EXPERIMENTAL_ARRAY 1
33 #ifdef _GLIBCXX_SYSHDR
34 #pragma GCC system_header
39 #if __cplusplus >= 201402L
44 namespace std _GLIBCXX_VISIBILITY(default)
46 _GLIBCXX_BEGIN_NAMESPACE_VERSION
48 namespace experimental
50 inline namespace fundamentals_v2
52 #define __cpp_lib_experimental_make_array 201505
63 template<
typename _Dest,
typename... _Types>
64 struct __make_array_elem
69 template<
typename... _Types>
70 struct __make_array_elem<void, _Types...>
71 : common_type<_Types...>
77 template <
typename _Up>
78 struct __is_reference_wrapper<reference_wrapper<_Up>> :
true_type
81 static_assert(!__or_<__is_reference_wrapper<decay_t<_Types>>...>::value,
82 "make_array must be used with an explicit target type when"
83 "any of the arguments is a reference_wrapper");
87 template <
typename _Dest = void,
typename... _Types>
89 array<
typename __make_array_elem<_Dest, _Types...>::type,
sizeof...(_Types)>
92 return {{ std::forward<_Types>(__t)... }};
95 template <
typename _Tp,
size_t _Nm,
size_t... _Idx>
99 return {{__a[_Idx]...}};
103 template <
typename _Tp,
size_t _Nm>
104 constexpr array<remove_cv_t<_Tp>, _Nm>
115 _GLIBCXX_END_NAMESPACE_VERSION
120 #endif // _GLIBCXX_EXPERIMENTAL_ARRAY