29 #ifndef _GLIBCXX_EXPERIMENTAL_ARRAY
30 #define _GLIBCXX_EXPERIMENTAL_ARRAY 1
32 #pragma GCC system_header
34 #if __cplusplus <= 201103L
41 namespace std _GLIBCXX_VISIBILITY(default)
43 namespace experimental
45 inline namespace fundamentals_v2
47 _GLIBCXX_BEGIN_NAMESPACE_VERSION
49 #define __cpp_lib_experimental_make_array 201505
60 template<
typename _Dest,
typename... _Types>
61 struct __make_array_elem
66 template<
typename... _Types>
67 struct __make_array_elem<void, _Types...>
68 : common_type<_Types...>
74 template <
typename _Up>
75 struct __is_reference_wrapper<reference_wrapper<_Up>> :
true_type
78 static_assert(!__or_<__is_reference_wrapper<decay_t<_Types>>...>::value,
79 "make_array must be used with an explicit target type when"
80 "any of the arguments is a reference_wrapper");
83 template <
typename _Dest = void,
typename... _Types>
85 array<
typename __make_array_elem<_Dest, _Types...>::type,
sizeof...(_Types)>
86 make_array(_Types&&... __t)
88 return {{ std::forward<_Types>(__t)... }};
91 template <
typename _Tp,
size_t _Nm,
size_t... _Idx>
92 constexpr array<remove_cv_t<_Tp>, _Nm>
93 __to_array(_Tp (&__a)[_Nm], index_sequence<_Idx...>)
95 return {{__a[_Idx]...}};
98 template <
typename _Tp,
size_t _Nm>
99 constexpr array<remove_cv_t<_Tp>, _Nm>
100 to_array(_Tp (&__a)[_Nm])
101 noexcept(is_nothrow_constructible<remove_cv_t<_Tp>, _Tp&>::value)
103 return __to_array(__a, make_index_sequence<_Nm>{});
107 _GLIBCXX_END_NAMESPACE_VERSION
115 #endif // _GLIBCXX_EXPERIMENTAL_ARRAY
integral_constant< bool, false > false_type
The type used as a compile-time boolean with false value.
integral_constant< bool, true > true_type
The type used as a compile-time boolean with true value.