Horizon
Loading...
Searching...
No Matches
satisfy_boost_range.hpp
1// Range v3 library
2//
3// Copyright Eric Niebler 2014-present
4//
5// Use, modification and distribution is subject to the
6// Boost Software License, Version 1.0. (See accompanying
7// file LICENSE_1_0.txt or copy at
8// http://www.boost.org/LICENSE_1_0.txt)
9//
10// Project home: https://github.com/ericniebler/range-v3
11//
12
13#ifndef RANGES_V3_DETAIL_SATISFY_BOOST_RANGE_HPP
14#define RANGES_V3_DETAIL_SATISFY_BOOST_RANGE_HPP
15
16#include <meta/meta.hpp>
17
19
22
23#ifndef RANGES_DOXYGEN_INVOKED
24namespace boost
25{
28 template<typename T, typename U>
30
33 template<typename T, typename U>
35
38 template<typename T>
40
43 template<typename T>
44 struct range_size;
45} // namespace boost
46
48#define RANGES_SATISFY_BOOST_RANGE(view_name) \
49 namespace boost \
50 { \
51 template<typename... Ts> \
52 struct range_mutable_iterator< \
53 view_name<Ts...>, \
54 ::meta::if_c<(bool)::ranges::common_range<view_name<Ts...>>>> \
55 { \
56 using type = ::ranges::iterator_t<view_name<Ts...>>; \
57 }; \
58 template<typename... Ts> \
59 struct range_const_iterator< \
60 view_name<Ts...>, \
61 ::meta::if_c<(bool)::ranges::common_range<view_name<Ts...> const>>> \
62 { \
63 using type = ::ranges::iterator_t<view_name<Ts...> const>; \
64 }; \
65 template<typename... Ts> \
66 struct range_value<view_name<Ts...>> \
67 { \
68 using type = ::ranges::range_value_t<view_name<Ts...>>; \
69 }; \
70 template<typename... Ts> \
71 struct range_size<view_name<Ts...>> \
72 : ::meta::if_c<(bool)::ranges::common_range<view_name<Ts...>>, \
73 ::meta::defer<::ranges::range_size_t, view_name<Ts...>>, \
74 ::meta::nil_> \
75 {}; \
76 template<typename... Ts> \
77 struct range_size<view_name<Ts...> const> \
78 : ::meta::if_c<(bool)::ranges::common_range<view_name<Ts...> const>, \
79 ::meta::defer<::ranges::range_size_t, view_name<Ts...> const>, \
80 ::meta::nil_> \
81 {}; \
82 }
83#else
84#define RANGES_SATISFY_BOOST_RANGE(view_name)
85#endif
86
87#endif
Tiny meta-programming library.
Boost Range specialisation point, for making Boost ranges out of range-v3 views.
Definition satisfy_boost_range.hpp:34
Boost Range specialisation point, for making Boost ranges out of range-v3 views.
Definition satisfy_boost_range.hpp:29
Boost Range specialisation point, for making Boost ranges out of range-v3 views.
Definition satisfy_boost_range.hpp:44
Boost Range specialisation point, for making Boost ranges out of range-v3 views.
Definition satisfy_boost_range.hpp:39