@@ -142,21 +142,17 @@ struct iter_cat<IteratorConcept, ReferenceType, false> {};
142142
143143template <typename IteratorConcept, typename ReferenceType>
144144struct iter_cat <IteratorConcept, ReferenceType, true > {
145- private:
146- static constexpr auto compute_category_tag () {
147- if constexpr (!std::is_reference_v<ReferenceType>) {
148- return std::input_iterator_tag{};
149- } else if constexpr (std::is_base_of_v<std::random_access_iterator_tag, IteratorConcept>) {
150- return std::random_access_iterator_tag{};
151- } else if constexpr (std::is_base_of_v<std::bidirectional_iterator_tag, IteratorConcept>) {
152- return std::bidirectional_iterator_tag{};
153- } else {
154- return std::forward_iterator_tag{};
155- }
156- }
157-
158- public:
159- using iterator_category = std::invoke_result_t <decltype (compute_category_tag)>;
145+ using iterator_category =
146+ std::conditional_t <
147+ !std::is_reference_v<ReferenceType>,
148+ std::input_iterator_tag,
149+ std::conditional_t <
150+ std::is_base_of_v<std::random_access_iterator_tag, IteratorConcept>,
151+ std::random_access_iterator_tag,
152+ std::conditional_t <
153+ std::is_base_of_v<std::bidirectional_iterator_tag, IteratorConcept>,
154+ std::bidirectional_iterator_tag,
155+ std::forward_iterator_tag>>>;
160156};
161157
162158} // namespace detail
0 commit comments