1162852Sdes// -*- C++ -*-
2162852Sdes//===----------------------------------------------------------------------===//
3162852Sdes//
4162852Sdes// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5162852Sdes// See https://llvm.org/LICENSE.txt for license information.
6162852Sdes// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7162852Sdes//
8162852Sdes//===----------------------------------------------------------------------===//
9162852Sdes
10162852Sdes#ifndef _LIBCPP___ITERATOR_RANGES_ITERATOR_TRAITS_H
11162852Sdes#define _LIBCPP___ITERATOR_RANGES_ITERATOR_TRAITS_H
12162852Sdes
13162852Sdes#include <__config>
14162852Sdes#include <__fwd/pair.h>
15162852Sdes#include <__ranges/concepts.h>
16162852Sdes#include <__type_traits/add_const.h>
17162852Sdes#include <__type_traits/remove_const.h>
18162852Sdes
19162852Sdes#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
20162852Sdes#  pragma GCC system_header
21162852Sdes#endif
22162852Sdes
23162852Sdes_LIBCPP_BEGIN_NAMESPACE_STD
24180746Sdes
25180746Sdes#if _LIBCPP_STD_VER >= 23
26180746Sdes
27180746Sdestemplate <ranges::input_range _Range>
28180746Sdesusing __range_key_type = __remove_const_t<typename ranges::range_value_t<_Range>::first_type>;
29180746Sdes
30180746Sdestemplate <ranges::input_range _Range>
31180746Sdesusing __range_mapped_type = typename ranges::range_value_t<_Range>::second_type;
32180746Sdes
33180746Sdestemplate <ranges::input_range _Range>
34180746Sdesusing __range_to_alloc_type =
35180746Sdes    pair<add_const_t<typename ranges::range_value_t<_Range>::first_type>,
36180746Sdes         typename ranges::range_value_t<_Range>::second_type>;
37180746Sdes
38162852Sdes#endif
39162852Sdes
40162852Sdes_LIBCPP_END_NAMESPACE_STD
41162852Sdes
42162852Sdes#endif // _LIBCPP___ITERATOR_RANGES_ITERATOR_TRAITS_H
43162852Sdes