diff --git a/include/beman/iterator_interface/iterator_interface.hpp b/include/beman/iterator_interface/iterator_interface.hpp index 4e4be1a..94592f0 100644 --- a/include/beman/iterator_interface/iterator_interface.hpp +++ b/include/beman/iterator_interface/iterator_interface.hpp @@ -142,21 +142,17 @@ struct iter_cat {}; template struct iter_cat { -private: - static constexpr auto compute_category_tag() { - if constexpr (!std::is_reference_v) { - return std::input_iterator_tag{}; - } else if constexpr (std::is_base_of_v) { - return std::random_access_iterator_tag{}; - } else if constexpr (std::is_base_of_v) { - return std::bidirectional_iterator_tag{}; - } else { - return std::forward_iterator_tag{}; - } - } - -public: - using iterator_category = std::invoke_result_t; + using iterator_category = + std::conditional_t< + !std::is_reference_v, + std::input_iterator_tag, + std::conditional_t< + std::is_base_of_v, + std::random_access_iterator_tag, + std::conditional_t< + std::is_base_of_v, + std::bidirectional_iterator_tag, + std::forward_iterator_tag>>>; }; } // namespace detail