35 template <
typename T,
typename Enable =
void>
struct _regular {
39 template <
typename T>
struct _regular<T, std::void_t<typename T::regular_type>> {
40 using type =
typename T::regular_type;
43 template <
typename T,
typename Enable =
void>
struct _view_or_type {
47 template <
typename T>
struct _view_or_type<T, std::void_t<typename T::view_type>> {
48 using type =
typename T::view_type;
51 template <
typename T>
struct _view_or_type<T const, std::void_t<typename T::view_type>> {
52 using type =
typename T::const_view_type;
55 template <
typename T,
typename Enable =
void>
struct _const_view_or_type {
59 template <
typename T>
struct _const_view_or_type<T, std::void_t<typename T::const_view_type>> {
60 using type =
typename T::const_view_type;
75 template <
typename T>
using regular_t =
typename details::_regular<std::decay_t<T>>::type;
82 template <
typename T>
using view_or_type_t =
typename details::_view_or_type<T>::type;
92 using nda::make_regular;
typename details::_view_or_type< T >::type view_or_type_t
Get the view type of a given type T if it exists.
typename details::_regular< std::decay_t< T > >::type regular_t
Get the regular type of a given type T if it exists.
typename details::_const_view_or_type< T >::type const_view_or_type_t
Get the const view type of a given type T if it exists.