tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
iter_difference_t.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2// SPDX-FileCopyrightText: Copyright (C) 2023 Tobias Hienzsch
3
4#ifndef TETL_ITERATOR_ITER_DIFFERENCE_T_HPP
5#define TETL_ITERATOR_ITER_DIFFERENCE_T_HPP
6
7#include <etl/_iterator/incrementable_traits.hpp>
8#include <etl/_iterator/iterator_traits.hpp>
9#include <etl/_type_traits/is_specialized.hpp>
10#include <etl/_type_traits/remove_cvref.hpp>
11
12namespace etl {
13
14namespace detail {
15
16template <typename T>
17struct iter_difference {
18 using type = typename etl::incrementable_traits<etl::remove_cvref_t<T>>::difference_type;
19};
20
21template <typename T>
22 requires(is_specialized_v<etl::iterator_traits, etl::remove_cvref_t<T>>)
23struct iter_difference<T> {
24 using type = typename etl::iterator_traits<etl::remove_cvref_t<T>>::difference_type;
25};
26
27} // namespace detail
28
29/// \ingroup iterator
30template <typename T>
31using iter_difference_t = typename detail::iter_difference<T>::type;
32
33} // namespace etl
34
35#endif // TETL_ITERATOR_ITER_DIFFERENCE_T_HPP
Definition adjacent_find.hpp:9
Definition incrementable_traits.hpp:21
iterator_traits is the type trait class that provides uniform interface to the properties of LegacyIt...
Definition iterator_traits.hpp:48