tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
indirectly_readable_traits.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2
3#ifndef TETL_ITERATOR_INDIRECTLY_READABLE_TRAITS_HPP
4#define TETL_ITERATOR_INDIRECTLY_READABLE_TRAITS_HPP
5
11
12namespace etl {
13
14namespace detail {
15
16template <typename>
17struct maybe_value_type { };
18
19template <typename T>
20 requires etl::is_object_v<T>
21struct maybe_value_type<T> {
22 using value_type = etl::remove_cv_t<T>;
23};
24
25template <typename T>
26concept has_member_value_type = requires { typename T::value_type; };
27
28template <typename T>
29concept has_member_element_type = requires { typename T::element_type; };
30
31} // namespace detail
32
33template <typename I>
35
36template <typename T>
38
39template <typename T>
40struct indirectly_readable_traits<T*> : detail::maybe_value_type<T> { };
41
42template <typename I>
43 requires etl::is_array_v<I>
47
48template <detail::has_member_value_type T>
49struct indirectly_readable_traits<T> : detail::maybe_value_type<typename T::value_type> { };
50
51template <detail::has_member_element_type T>
52struct indirectly_readable_traits<T> : detail::maybe_value_type<typename T::element_type> { };
53
54template <detail::has_member_value_type T>
55 requires detail::has_member_element_type<T>
56struct indirectly_readable_traits<T> { };
57
58template <detail::has_member_value_type T>
59 requires(detail::has_member_element_type<T> and etl::same_as<etl::remove_cv_t<typename T::element_type>, etl::remove_cv_t<typename T::value_type>>)
60struct indirectly_readable_traits<T> : detail::maybe_value_type<typename T::value_type> { };
61
62} // namespace etl
63
64#endif // TETL_ITERATOR_INDIRECTLY_READABLE_TRAITS_HPP
Definition adjacent_find.hpp:8
remove_const_t< remove_volatile_t< T > > remove_cv_t
Definition remove_cv.hpp:22
constexpr bool is_object_v
Definition is_object.hpp:35
constexpr bool is_array_v
Definition is_array.hpp:26
etl::remove_cv_t< etl::remove_extent_t< I > > value_type
Definition indirectly_readable_traits.hpp:45
Definition indirectly_readable_traits.hpp:34