16 #ifndef MDSPAN_INCLUDE_EXPERIMENTAL_BITS_TRAIT_BACKPORTS_HPP_ 17 #define MDSPAN_INCLUDE_EXPERIMENTAL_BITS_TRAIT_BACKPORTS_HPP_ 22 #include <type_traits> 28 #ifdef _MDSPAN_NEEDS_TRAIT_VARIABLE_TEMPLATE_BACKPORTS 30 #if _MDSPAN_USE_VARIABLE_TEMPLATES 33 #define _MDSPAN_BACKPORT_TRAIT(TRAIT) \ 34 template <class... Args> _MDSPAN_INLINE_VARIABLE constexpr auto TRAIT##_v = TRAIT<Args...>::value; 36 _MDSPAN_BACKPORT_TRAIT(is_assignable)
37 _MDSPAN_BACKPORT_TRAIT(is_constructible)
38 _MDSPAN_BACKPORT_TRAIT(is_convertible)
39 _MDSPAN_BACKPORT_TRAIT(is_default_constructible)
40 _MDSPAN_BACKPORT_TRAIT(is_trivially_destructible)
41 _MDSPAN_BACKPORT_TRAIT(is_same)
42 _MDSPAN_BACKPORT_TRAIT(is_empty)
43 _MDSPAN_BACKPORT_TRAIT(is_void)
45 #undef _MDSPAN_BACKPORT_TRAIT 49 #endif // _MDSPAN_USE_VARIABLE_TEMPLATES 51 #endif // _MDSPAN_NEEDS_TRAIT_VARIABLE_TEMPLATE_BACKPORTS 59 #if !defined(_MDSPAN_USE_INTEGER_SEQUENCE) || !_MDSPAN_USE_INTEGER_SEQUENCE 63 template <
class T, T... Vals>
65 static constexpr std::size_t size() noexcept {
return sizeof...(Vals); }
69 template <std::size_t... Vals>
74 template <
class T, T N, T I,
class Result>
77 template <
class T, T N, T... Vals>
83 template <
class T, T N, T I, T... Vals>
91 template <
class T, T N>
94 template <std::
size_t N>
98 using index_sequence_for = make_index_sequence<
sizeof...(T)>;
110 #if !defined(_MDSPAN_USE_STANDARD_TRAIT_ALIASES) || !_MDSPAN_USE_STANDARD_TRAIT_ALIASES 114 #define _MDSPAN_BACKPORT_TRAIT_ALIAS(TRAIT) \ 115 template <class... Args> using TRAIT##_t = typename TRAIT<Args...>::type; 117 _MDSPAN_BACKPORT_TRAIT_ALIAS(remove_cv)
118 _MDSPAN_BACKPORT_TRAIT_ALIAS(remove_reference)
120 template <
bool _B,
class _T=
void>
121 using enable_if_t =
typename enable_if<_B, _T>::type;
123 #undef _MDSPAN_BACKPORT_TRAIT_ALIAS 132 #endif //MDSPAN_INCLUDE_EXPERIMENTAL_BITS_TRAIT_BACKPORTS_HPP_
Definition: trait_backports.hpp:75
Definition: trait_backports.hpp:64