VCCC  2024.05
VisualCamp Common C++ library
viewable_range.hpp
Go to the documentation of this file.
1 //
2 // Created by yonggyulee on 2023/12/29.
3 //
4 
5 #ifndef VCCC_RANGES_VIEWABLE_RANGE_HPP
6 #define VCCC_RANGES_VIEWABLE_RANGE_HPP
7 
8 #include <type_traits>
9 
11 #include "vccc/__ranges/range.hpp"
12 #include "vccc/__ranges/view.hpp"
18 
19 namespace vccc {
20 namespace ranges {
21 namespace detail {
22 
24 struct viewable_range_impl : std::false_type {};
25 
26 template<typename T>
27 struct viewable_range_impl<T, true>
28  : disjunction<
29  conjunction<
30  view<remove_cvref_t<T>>,
31  constructible_from<remove_cvref_t<T>, T> >,
32  conjunction<
33  negation< view<remove_cvref_t<T>> >,
34  disjunction<
35  std::is_lvalue_reference<T>,
36  conjunction<
37  movable<std::remove_reference_t<T>>,
38  negation< is_initializer_list<remove_cvref_t<T>> >
39  >
40  >
41  >
42  >{};
43 
44 } // namespace detail
45 
48 
49 
58 template<typename T>
59 struct viewable_range : detail::viewable_range_impl<T> {};
60 
62 
63 } // namespace ranges
64 } // namespace vccc
65 
66 #endif // VCCC_RANGES_VIEWABLE_RANGE_HPP
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
specifies the requirements for a range to be safely convertible to a view
Definition: viewable_range.hpp:59