Skip to content

Commit 1ffbb8b

Browse files
Merge branch 'boostorg:develop' into patch-1
2 parents c9e4a8d + 4dcba46 commit 1ffbb8b

6 files changed

Lines changed: 88 additions & 2 deletions

File tree

include/boost/iterator/is_iterator.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,19 @@ struct is_iterator< volatile T > : public detail::is_iterator_impl< T >::type {}
139139
template< typename T >
140140
struct is_iterator< const volatile T > : public detail::is_iterator_impl< T >::type {};
141141

142+
#if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
143+
template< typename T >
144+
BOOST_INLINE_VARIABLE constexpr bool is_iterator_v = iterators::is_iterator< T >::value;
145+
#endif // !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
146+
142147
} // namespace iterators
143148

144149
using iterators::is_iterator;
145150

151+
#if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
152+
using iterators::is_iterator_v;
153+
#endif // !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
154+
146155
} // namespace boost
147156

148157
#endif // BOOST_ITERATOR_IS_ITERATOR_HPP_INCLUDED_

include/boost/iterator/is_lvalue_iterator.hpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#ifndef IS_LVALUE_ITERATOR_DWA2003112_HPP
55
#define IS_LVALUE_ITERATOR_DWA2003112_HPP
66

7+
#include <boost/config.hpp>
78
#include <boost/iterator/detail/type_traits/conjunction.hpp>
89

910
#include <iterator>
@@ -71,11 +72,23 @@ struct is_non_const_lvalue_iterator :
7172
{
7273
};
7374

75+
#if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
76+
template< typename T >
77+
BOOST_INLINE_VARIABLE constexpr bool is_lvalue_iterator_v = iterators::is_lvalue_iterator< T >::value;
78+
template< typename T >
79+
BOOST_INLINE_VARIABLE constexpr bool is_non_const_lvalue_iterator_v = iterators::is_non_const_lvalue_iterator< T >::value;
80+
#endif // !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
81+
7482
} // namespace iterators
7583

7684
using iterators::is_lvalue_iterator;
7785
using iterators::is_non_const_lvalue_iterator;
7886

87+
#if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
88+
using iterators::is_lvalue_iterator_v;
89+
using iterators::is_non_const_lvalue_iterator_v;
90+
#endif // !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
91+
7992
} // namespace boost
8093

8194
#endif // IS_LVALUE_ITERATOR_DWA2003112_HPP

include/boost/iterator/is_readable_iterator.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#include <iterator>
88
#include <type_traits>
9+
#include <boost/config.hpp>
910

1011
namespace boost {
1112
namespace iterators {
@@ -60,10 +61,19 @@ struct is_readable_iterator :
6061
{
6162
};
6263

64+
#if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
65+
template< typename T >
66+
BOOST_INLINE_VARIABLE constexpr bool is_readable_iterator_v = iterators::is_readable_iterator< T >::value;
67+
#endif // !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
68+
6369
} // namespace iterators
6470

6571
using iterators::is_readable_iterator;
6672

73+
#if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
74+
using iterators::is_readable_iterator_v;
75+
#endif // !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
76+
6777
} // namespace boost
6878

6979
#endif // IS_READABLE_ITERATOR_DWA2003112_HPP

test/is_iterator.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <vector>
1818
#include <string>
1919
#include <iterator>
20+
#include <boost/config.hpp>
2021
#include <boost/iterator/iterator_adaptor.hpp>
2122
#include <boost/core/lightweight_test.hpp>
2223

@@ -160,5 +161,25 @@ int main()
160161
BOOST_TEST(!boost::iterators::is_iterator< int (&)(int) >::value);
161162
BOOST_TEST(!boost::iterators::is_iterator< int (&)[10] >::value);
162163

164+
#if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
165+
BOOST_TEST(boost::iterators::is_iterator_v< int* >);
166+
BOOST_TEST(boost::iterators::is_iterator_v< const int* >);
167+
BOOST_TEST(boost::iterators::is_iterator_v< complete* >);
168+
BOOST_TEST(boost::iterators::is_iterator_v< std::reverse_iterator< int* > >);
169+
BOOST_TEST(boost::iterators::is_iterator_v< std::reverse_iterator< complete* > >);
170+
BOOST_TEST(boost::iterators::is_iterator_v< adapted_iterator< int* > >);
171+
172+
BOOST_TEST(!boost::iterators::is_iterator_v< int >);
173+
BOOST_TEST(!boost::iterators::is_iterator_v< void* >);
174+
BOOST_TEST(!boost::iterators::is_iterator_v< int (int) >);
175+
BOOST_TEST(!boost::iterators::is_iterator_v< int (*)(int) >);
176+
BOOST_TEST(!boost::iterators::is_iterator_v< int complete::* >);
177+
BOOST_TEST(!boost::iterators::is_iterator_v< int (complete::*)(int) >);
178+
BOOST_TEST(!boost::iterators::is_iterator_v< int*[] >);
179+
BOOST_TEST(!boost::iterators::is_iterator_v< int*[10] >);
180+
BOOST_TEST(!boost::iterators::is_iterator_v< int& >);
181+
BOOST_TEST(!boost::iterators::is_iterator_v< int*& >);
182+
#endif // !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
183+
163184
return boost::report_errors();
164185
}

test/is_lvalue_iterator.cpp

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
// subject to the Boost Software License, Version 1.0. (See accompanying
33
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
44

5+
#include <boost/iterator/is_lvalue_iterator.hpp>
56
#include <deque>
67
#include <iterator>
78
#include <cstddef> // std::ptrdiff_t
9+
#include <boost/config.hpp>
810
#include <boost/noncopyable.hpp>
9-
#include <boost/iterator/is_lvalue_iterator.hpp>
1011

1112
struct v
1213
{
@@ -168,5 +169,25 @@ int main()
168169
static_assert(!boost::is_non_const_lvalue_iterator<constant_lvalue_iterator<float>>::value,
169170
"boost::is_non_const_lvalue_iterator<constant_lvalue_iterator<float>>::value is expected to be false.");
170171

172+
#if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
173+
static_assert(boost::is_lvalue_iterator_v<v*>,
174+
"boost::is_lvalue_iterator_v<v*> is expected to be true.");
175+
static_assert(boost::is_lvalue_iterator_v<v const*>,
176+
"boost::is_lvalue_iterator_v<v const*> is expected to be true.");
177+
static_assert(!boost::is_lvalue_iterator_v<proxy_iterator<int>>,
178+
"boost::is_lvalue_iterator_v<proxy_iterator<int>> is expected to be false.");
179+
static_assert(!boost::is_lvalue_iterator_v<value_iterator>,
180+
"boost::is_lvalue_iterator_v<value_iterator> is expected to be false.");
181+
182+
static_assert(boost::is_non_const_lvalue_iterator_v<v*>,
183+
"boost::is_non_const_lvalue_iterator_v<v*> is expected to be true.");
184+
static_assert(!boost::is_non_const_lvalue_iterator_v<v const*>,
185+
"boost::is_non_const_lvalue_iterator_v<v const*> is expected to be false.");
186+
static_assert(!boost::is_non_const_lvalue_iterator_v<proxy_iterator<int>>,
187+
"boost::is_non_const_lvalue_iterator_v<proxy_iterator<int>> is expected to be false.");
188+
static_assert(!boost::is_non_const_lvalue_iterator_v<value_iterator>,
189+
"boost::is_non_const_lvalue_iterator_v<value_iterator> is expected to be false.");
190+
#endif // !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
191+
171192
return 0;
172193
}

test/is_readable_iterator.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
// subject to the Boost Software License, Version 1.0. (See accompanying
33
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
44

5+
#include <boost/iterator/is_readable_iterator.hpp>
56
#include <deque>
67
#include <iterator>
78
#include <cstddef> // std::ptrdiff_t
9+
#include <boost/config.hpp>
810
#include <boost/noncopyable.hpp>
9-
#include <boost/iterator/is_readable_iterator.hpp>
1011

1112
struct v
1213
{
@@ -97,5 +98,16 @@ int main()
9798
static_assert(boost::is_readable_iterator<noncopyable_iterator>::value,
9899
"boost::is_readable_iterator<noncopyable_iterator>::value is expected to be true.");
99100

101+
#if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
102+
static_assert(boost::is_readable_iterator_v<v*>,
103+
"boost::is_readable_iterator_v<v*> is expected to be true.");
104+
static_assert(boost::is_readable_iterator_v<v const*>,
105+
"boost::is_readable_iterator_v<v const*> is expected to be true.");
106+
static_assert(boost::is_readable_iterator_v<proxy_iterator>,
107+
"boost::is_readable_iterator_v<proxy_iterator> is expected to be true.");
108+
static_assert(!boost::is_readable_iterator_v<proxy_iterator2>,
109+
"boost::is_readable_iterator_v<proxy_iterator2> is expected to be false.");
110+
#endif // !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
111+
100112
return 0;
101113
}

0 commit comments

Comments
 (0)