29 #ifndef _GLIBCXX_EXPERIMENTAL_ARRAY
30 #define _GLIBCXX_EXPERIMENTAL_ARRAY 1
32 #pragma GCC system_header
34 #if __cplusplus >= 201402L
39 namespace std _GLIBCXX_VISIBILITY(default)
41 _GLIBCXX_BEGIN_NAMESPACE_VERSION
43 namespace experimental
45 inline namespace fundamentals_v2
47 #define __cpp_lib_experimental_make_array 201505
58 template<
typename _Dest,
typename... _Types>
59 struct __make_array_elem
64 template<
typename... _Types>
65 struct __make_array_elem<void, _Types...>
66 : common_type<_Types...>
72 template <
typename _Up>
73 struct __is_reference_wrapper<reference_wrapper<_Up>> :
true_type
76 static_assert(!__or_<__is_reference_wrapper<decay_t<_Types>>...>::value,
77 "make_array must be used with an explicit target type when"
78 "any of the arguments is a reference_wrapper");
81 template <
typename _Dest = void,
typename... _Types>
83 array<
typename __make_array_elem<_Dest, _Types...>::type,
sizeof...(_Types)>
84 make_array(_Types&&... __t)
86 return {{ std::forward<_Types>(__t)... }};
89 template <
typename _Tp,
size_t _Nm,
size_t... _Idx>
90 constexpr array<remove_cv_t<_Tp>, _Nm>
91 __to_array(_Tp (&__a)[_Nm], index_sequence<_Idx...>)
93 return {{__a[_Idx]...}};
96 template <
typename _Tp,
size_t _Nm>
97 constexpr array<remove_cv_t<_Tp>, _Nm>
98 to_array(_Tp (&__a)[_Nm])
99 noexcept(is_nothrow_constructible<remove_cv_t<_Tp>, _Tp&>::value)
101 return __to_array(__a, make_index_sequence<_Nm>{});
108 _GLIBCXX_END_NAMESPACE_VERSION
113 #endif // _GLIBCXX_EXPERIMENTAL_ARRAY
integral_constant< bool, false > false_type
The type used as a compile-time boolean with false value.
enable_if< ::__array_traits< _Tp, _Nm >::_Is_swappable::value >::type noexcept(noexcept(__one.swap(__two)))
swap
integral_constant< bool, true > true_type
The type used as a compile-time boolean with true value.