Range library for C++14/17/20, basis for C++20's std::ranges
0.2.6 2017-06-21
ranges::experimental::generator
(from @CaseyCarter)ranges::optional
now behaves like std::optional
(from @CaseyCarter)view::chunk
works on Input ranges (from @CaseyCarter)for_each_n
algorithm (from @khlebnikov)0.2.4 April 12, 2017 Fix the following bug:
action::stable_sort
of vector
broken on Clang 3.8.1 since ~last Xmas (ericniebler/range-v3#632).Fix the following bug:
New in this release:
view::linear_distribute(from,to,n)
- A view of n
elements between from
and to
, distributed evenly.view::indices(n)
- A view of the indices [0,1,2...n-1]
.view::closed_indices(n)
- A view of the indices [0,1,2...n]
.This release also deprecates view::ints(n)
as confusing to new users.
New in this release:
view::cartesian_product
action::reverse
Thanks to @gnzlbg and @CaseyCarter for their help.
Bring many interfaces into sync with the Ranges TS.
Many interfaces are simply renamed. The following table shows the old names
and the new. (All names are in the ranges::v3
namespace.)
Old Name | New Name |
---|---|
indirect_swap |
iter_swap |
indirect_move |
iter_move |
iterator_value_t |
value_type_t |
iterator_reference_t |
reference_t |
iterator_difference_t |
difference_type_t |
iterator_size_t |
size_type_t |
iterator_rvalue_reference_t |
rvalue_reference_t |
iterator_common_reference_t |
iter_common_reference_t |
range_value_t |
range_value_type_t |
range_difference_t |
range_difference_type_t |
range_size_t |
range_size_type_t |
range_iterator_t |
iterator_t |
range_sentinel_t |
sentinel_t |
common_iterator
now requires that its two types (Iterator
and Sentinel
)
are different. Use common_iterator_t<I, S>
to get the old behavior (i.e., if the two types are the same, it is an alias for I
; otherwise, it is
common_iterator<I, S>
).
The following iterator adaptors now work with iterators that return proxies
from their postfix increment operator (i.e., operator++(int)
):
common_iterator
counted_iterator
The following customization points are now implemented per the Ranges TS
spec and will no longer find the associated unconstrained overload in
namespace std::
:
ranges::begin
ranges::end
ranges::size
ranges::swap
ranges::iter_swap
(In practice, this has very little effect but it may effect overloading in rare situations.)
ranges::is_swappable
now only takes one template parameter. The new
ranges::is_swappable_with<T, U>
tests whether T
and U
are swappable.
ranges::is_swappable<T>
is equivalent to ranges::is_swappable_with<T &, T &>
.
The following object concepts have changed to conform with the Ranges TS specification, and approved changes (see P0547):
Destructible
Constructible
DefaultConstructible
MoveConstructible
CopyConstructible
Movable
Assignable
The View
concept is no longer satisfied by reference types.
is_view
is now called enable_view
The syntax for defining a concept has changed slightly. See utility/iterator_concepts.hpp for examples.
This release drops support for gcc 4.8.
Small tweak to Writable
concept to fix #573.
This is a fairly stable release, and the first one to use semantic versioning.