@@ -525,15 +525,18 @@ namespace xt
525525 using inner_shape_type = typename E::inner_shape_type;
526526 using shape_type = typename E::shape_type;
527527
528- using strides_type = xtl::mpl::
529- eval_if_t <has_strides<E>, detail::expr_strides_type<E>, get_strides_type<shape_type>>;
530- using backstrides_type = xtl::mpl::
531- eval_if_t <has_strides<E>, detail::expr_backstrides_type<E>, get_strides_type<shape_type>>;
532- using inner_strides_type = xtl::mpl::
533- eval_if_t <has_strides<E>, detail::expr_inner_strides_type<E>, get_strides_type<shape_type>>;
534- using inner_backstrides_type = xtl::mpl::
535- eval_if_t <has_strides<E>, detail::expr_inner_backstrides_type<E>, get_strides_type<shape_type>>;
536- using storage_type = xtl::mpl::eval_if_t <has_storage_type<E>, detail::expr_storage_type<E>, make_invalid_type<>>;
528+ using strides_type = typename std::
529+ conditional_t <strided_expression<E>, detail::expr_strides_type<E>, get_strides_type<shape_type>>::type;
530+ using backstrides_type = typename std::
531+ conditional_t <strided_expression<E>, detail::expr_backstrides_type<E>, get_strides_type<shape_type>>::type;
532+ using inner_strides_type = typename std::
533+ conditional_t <strided_expression<E>, detail::expr_inner_strides_type<E>, get_strides_type<shape_type>>::type;
534+ using inner_backstrides_type = typename std::conditional_t <
535+ strided_expression<E>,
536+ detail::expr_inner_backstrides_type<E>,
537+ get_strides_type<shape_type>>::type;
538+ using storage_type = typename std::
539+ conditional_t <container_expression<E>, detail::expr_storage_type<E>, make_invalid_type<>>::type;
537540
538541 using stepper = typename E::stepper;
539542 using const_stepper = typename E::const_stepper;
@@ -638,43 +641,43 @@ namespace xt
638641 }
639642
640643 template <class T = E>
641- std::enable_if_t <has_strides <T>::value , const inner_strides_type&> strides () const
644+ std::enable_if_t <strided_expression <T>, const inner_strides_type&> strides () const
642645 {
643646 return m_ptr->strides ();
644647 }
645648
646649 template <class T = E>
647- std::enable_if_t <has_strides <T>::value , const inner_strides_type&> backstrides () const
650+ std::enable_if_t <strided_expression <T>, const inner_strides_type&> backstrides () const
648651 {
649652 return m_ptr->backstrides ();
650653 }
651654
652655 template <class T = E>
653- std::enable_if_t <has_data_interface <T>::value , pointer> data () noexcept
656+ std::enable_if_t <data_interface_expression <T>, pointer> data () noexcept
654657 {
655658 return m_ptr->data ();
656659 }
657660
658661 template <class T = E>
659- std::enable_if_t <has_data_interface <T>::value , pointer> data () const noexcept
662+ std::enable_if_t <data_interface_expression <T>, pointer> data () const noexcept
660663 {
661664 return m_ptr->data ();
662665 }
663666
664667 template <class T = E>
665- std::enable_if_t <has_data_interface <T>::value , size_type> data_offset () const noexcept
668+ std::enable_if_t <data_interface_expression <T>, size_type> data_offset () const noexcept
666669 {
667670 return m_ptr->data_offset ();
668671 }
669672
670673 template <class T = E>
671- std::enable_if_t <has_data_interface <T>::value , typename T::storage_type&> storage () noexcept
674+ std::enable_if_t <data_interface_expression <T>, typename T::storage_type&> storage () noexcept
672675 {
673676 return m_ptr->storage ();
674677 }
675678
676679 template <class T = E>
677- std::enable_if_t <has_data_interface <T>::value , const typename T::storage_type&> storage () const noexcept
680+ std::enable_if_t <data_interface_expression <T>, const typename T::storage_type&> storage () const noexcept
678681 {
679682 return m_ptr->storage ();
680683 }
0 commit comments