18ed702b8SKonstantin Varlamov //===----------------------------------------------------------------------===// 28ed702b8SKonstantin Varlamov // 38ed702b8SKonstantin Varlamov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 48ed702b8SKonstantin Varlamov // See https://llvm.org/LICENSE.txt for license information. 58ed702b8SKonstantin Varlamov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 68ed702b8SKonstantin Varlamov // 78ed702b8SKonstantin Varlamov //===----------------------------------------------------------------------===// 88ed702b8SKonstantin Varlamov 98ed702b8SKonstantin Varlamov #ifndef _LIBCPP___ALGORITHM_RANGES_ITERATOR_CONCEPT_H 108ed702b8SKonstantin Varlamov #define _LIBCPP___ALGORITHM_RANGES_ITERATOR_CONCEPT_H 118ed702b8SKonstantin Varlamov 128ed702b8SKonstantin Varlamov #include <__config> 138ed702b8SKonstantin Varlamov #include <__iterator/concepts.h> 148ed702b8SKonstantin Varlamov #include <__iterator/iterator_traits.h> 15e0a66116SNikolas Klauser #include <__type_traits/remove_cvref.h> 168ed702b8SKonstantin Varlamov 178ed702b8SKonstantin Varlamov #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 188ed702b8SKonstantin Varlamov # pragma GCC system_header 198ed702b8SKonstantin Varlamov #endif 208ed702b8SKonstantin Varlamov 217b462251SLouis Dionne _LIBCPP_PUSH_MACROS 227b462251SLouis Dionne #include <__undef_macros> 237b462251SLouis Dionne 244f15267dSNikolas Klauser #if _LIBCPP_STD_VER >= 20 258ed702b8SKonstantin Varlamov 268ed702b8SKonstantin Varlamov _LIBCPP_BEGIN_NAMESPACE_STD 278ed702b8SKonstantin Varlamov 288ed702b8SKonstantin Varlamov namespace ranges { 298ed702b8SKonstantin Varlamov 308ed702b8SKonstantin Varlamov template <class _IterMaybeQualified> 318ed702b8SKonstantin Varlamov consteval auto __get_iterator_concept() { 325fab33afSNikolas Klauser using _Iter = __remove_cvref_t<_IterMaybeQualified>; 338ed702b8SKonstantin Varlamov 348ed702b8SKonstantin Varlamov if constexpr (contiguous_iterator<_Iter>) 358ed702b8SKonstantin Varlamov return contiguous_iterator_tag(); 368ed702b8SKonstantin Varlamov else if constexpr (random_access_iterator<_Iter>) 378ed702b8SKonstantin Varlamov return random_access_iterator_tag(); 388ed702b8SKonstantin Varlamov else if constexpr (bidirectional_iterator<_Iter>) 398ed702b8SKonstantin Varlamov return bidirectional_iterator_tag(); 408ed702b8SKonstantin Varlamov else if constexpr (forward_iterator<_Iter>) 418ed702b8SKonstantin Varlamov return forward_iterator_tag(); 428ed702b8SKonstantin Varlamov else if constexpr (input_iterator<_Iter>) 438ed702b8SKonstantin Varlamov return input_iterator_tag(); 448ed702b8SKonstantin Varlamov } 458ed702b8SKonstantin Varlamov 468ed702b8SKonstantin Varlamov template <class _Iter> 47*f6958523SNikolas Klauser using __iterator_concept _LIBCPP_NODEBUG = decltype(__get_iterator_concept<_Iter>()); 488ed702b8SKonstantin Varlamov 498ed702b8SKonstantin Varlamov } // namespace ranges 508ed702b8SKonstantin Varlamov _LIBCPP_END_NAMESPACE_STD 518ed702b8SKonstantin Varlamov 524f15267dSNikolas Klauser #endif // _LIBCPP_STD_VER >= 20 538ed702b8SKonstantin Varlamov 547b462251SLouis Dionne _LIBCPP_POP_MACROS 557b462251SLouis Dionne 568ed702b8SKonstantin Varlamov #endif // _LIBCPP___ALGORITHM_RANGES_ITERATOR_CONCEPT_H 57