Files
tdesktop/Telegram/ThirdParty/range-v3/doc/gh-pages/release_notes.html
allhaileris afb81b8278
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Close stale issues and PRs / stale (push) Successful in 13s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
init
2026-02-16 15:50:16 +03:00

536 lines
40 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Range-v3: Release Notes</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Range-v3
</div>
<div id="projectbrief">Range algorithms, views, and actions for the Standard Library</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.svg"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('release_notes.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">Release Notes </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p ><a class="anchor" id="md_release_notes"></a></p>
<h1><a class="anchor" id="v0-12-0"></a>
Version 0.12.0 "Dude, Where's My Bored Ape?"</h1>
<p ><em>Released:</em> June 19, 2022</p>
<blockquote class="doxtable">
<p >&zwj;<b>IMPORTANT:</b> This release deprecates <code>views::group_by</code> which was an endless source of confusion. <code>group_by</code> is replaced with <code>views::chunk_by</code> (which, beware, has <em>subtly</em> different semantics, see below.) </p>
</blockquote>
<p>Changes:</p><ul>
<li><b>NEW:</b> <code>views::chunk_by</code> which, like the old <code>views::group_by</code> it replaces, splits a range into a range-of-ranges, where adjacent elements satisfy a binary predicate (<a href="https://github.com/ericniebler/range-v3/pull/1648">#1648</a>). [<em>Note:</em> Whereas <code>views::group_by</code> evaluated the predicate between the current element and the <em>first</em> element in the chunk, <code>views::chunk_by</code> evaluates the predicate between <em>adjacent</em> elements. &ndash; <em>end note</em>]</li>
<li><b>NEW:</b> <code>constexpr</code> all the algorithms that are <code>constexpr</code> in C++20's <code>std::ranges</code> (<a href="https://github.com/ericniebler/range-v3/pull/1683">#1683</a>).</li>
<li><b>NEW:</b> Fold algorithms from <a href="http://wg21.link/P2322">P2322</a> (<a href="https://github.com/ericniebler/range-v3/pull/1628">#1628</a>), (<a href="https://github.com/ericniebler/range-v3/pull/1668">#1668</a>).</li>
<li><b>NEW:</b> <code><a class="el" href="classranges_1_1unformatted__ostream__iterator.html" title="Writes to an ostream object using the unformatted std::basic_ostream::write operation....">ranges::unformatted_ostream_iterator</a></code> (<a href="https://github.com/ericniebler/range-v3/pull/1586">#1586</a>).</li>
<li><b>NEW:</b> Support for the <code>build2</code> build system (<a href="https://github.com/ericniebler/range-v3/pull/1562">#1562</a>).</li>
<li>Implement <a href="http://wg21.link/P2328">P2328</a>: relax the constraint on <code><a class="el" href="structranges_1_1join__view.html">ranges::join_view</a></code> to support joining ranges of prvalue non-<code>view</code> ranges (<a href="https://github.com/ericniebler/range-v3/pull/1655">#1655</a>).</li>
<li>Improved algorithm for <code>ranges::linear_distribute</code> (<a href="https://github.com/ericniebler/range-v3/pull/1679">#1679</a>).</li>
<li>Renamed <code>safe_subrange_t</code> to <code>borrowed_subrange_t</code> (<a href="https://github.com/ericniebler/range-v3/pull/1542">#1542</a>).</li>
<li>Extend <code>ranges::to</code> to support conversion to container-of-containers (<a href="https://github.com/ericniebler/range-v3/pull/1553">#1553</a>).</li>
<li><code>views::enumerate</code> can be a <code>borrowed_view</code> (<a href="https://github.com/ericniebler/range-v3/pull/1571">#1571</a>).</li>
<li><code>ranges::upper_bound</code> works in the presence of overloaded <code>operator&amp;</code> (<a href="https://github.com/ericniebler/range-v3/pull/1632">#1632</a>).</li>
<li>Input iterators are no longer required to be default-constructible (<a href="https://github.com/ericniebler/range-v3/pull/1652">#1652</a>).</li>
</ul>
<p >Bugs fixed:</p><ul>
<li><code>ranges::to&lt;std::map&gt;(v)</code> does not work (<a href="https://github.com/ericniebler/range-v3/pull/1700">#1700</a>)</li>
<li><code>ranges::reverse_iterator</code> has the wrong <code>value_type</code> when reversing a proxy range (<a href="https://github.com/ericniebler/range-v3/pull/1670">#1670</a>).</li>
<li>A post-increment of a <code>ranges::counted_iterator</code> wrapping an input iterator with a <code>void</code>-returning post-increment operator isn't incrementing the count (<a href="https://github.com/ericniebler/range-v3/pull/1664">#1664</a>).</li>
<li>Bad assert in <code>views::drop_last</code> (<a href="https://github.com/ericniebler/range-v3/pull/1599">#1599</a>).</li>
<li>Read of uninitialized <code>bool</code> in <code>views::cache1</code> (<a href="https://github.com/ericniebler/range-v3/pull/1610">#1610</a>).</li>
<li><code>ranges::unstable_remove_if</code> calls predicate on same element twice (<a href="https://github.com/ericniebler/range-v3/pull/1629">#1629</a>).</li>
<li><code>ranges::on(f,g)(x...)</code> should be <code>f(g(x)...)</code> instead of <code>f(g(x...))</code> (<a href="https://github.com/ericniebler/range-v3/pull/1661">#1661</a>).</li>
<li>Broken qualification of cmake targets (<a href="https://github.com/ericniebler/range-v3/pull/1557">#1557</a>).</li>
<li>Various portability and documentation fixes.</li>
</ul>
<p ><b>Credits:</b> I would like to thank the following people who contributed to this release (in no particular order): Barry Revzin, @dvirtz, Gonzalo Brito, Johel Ernesto Guerrero Peña, Joël Lamotte, Doug Roeper, Facundo Tuesca, Vitaly Zaitsev, @23rd, @furkanusta, Jonathan Haigh, @SmorkalovG, @marehr, Matt Beardsley, Chris Glover, Louis Dionne, Jin Shang (@js8544), Hui Xie, @huixie90, Robert Maynard, Silver Zachara, @sergegers, Théo DELRIEU, @LesnyRumcajs, Yehezkel Bernat, Maciej Patro, Klemens Nanni, Thomas Madlener, and Jason Merrill.</p>
<p >&amp;#127881; Special thanks to Barry Revzin for stepping up to be part-time co-maintainer of range-v3. &amp;#127881;</p>
<h1><a class="anchor" id="v0-11-0"></a>
Version 0.11.0 "Thanks, ISO"</h1>
<p ><em>Released:</em> August 6, 2020</p>
<blockquote class="doxtable">
<p >&zwj;<b>IMPORTANT:</b> This release removes the heuristic that tries to guess whether a range type </p>
</blockquote>
<p>is a "view" (lightweight, non-owning range), in accordance with the C++20. <b>This is a potentially source-breaking change.</b> Code that previously used an rvalue range as the start of a pipeline could stop compiling if the range library is not explicitly told that that range type is a view. To override the new default, please specialize the <code>ranges::enable_view&lt;R&gt;</code> Boolean variable template.</p>
<blockquote class="doxtable">
<p >&zwj;<b>IMPORTANT:</b> This release removes the implicit conversion from views to containers. </p>
</blockquote>
<p>To construct a container from an arbitrary range, you must now explicitly use <code>ranges::to</code>. For example, the following code no longer works: </p><blockquote class="doxtable">
<p >&zwj; </p><div class="fragment"><div class="line"> {c++}</div>
<div class="line">std::vector&lt;int&gt; is = ranges::views::ints(0, 10); // ERROR: no conversion</div>
</div><!-- fragment --><p >Instead, please write this as:</p>
<div class="fragment"><div class="line"> {c++}</div>
<div class="line">auto is = ranges::views::ints(0, 10) | ranges::to&lt;std::vector&gt;; // OK</div>
</div><!-- fragment --><p ><code>ranges::to</code> lives in header <code>&lt;<a class="el" href="conversion_8hpp.html">range/v3/range/conversion.hpp</a>&gt;</code> </p>
</blockquote>
<blockquote class="doxtable">
<p >&zwj;<b>IMPORTANT:</b> This release drops support for llvm-3.9. </p>
</blockquote>
<p>Changes:</p><ul>
<li><b>NEW:</b> A new concepts portability layer that short-circuits atomic constraints in <code>requires</code> clauses for better compile times when emulating concepts.</li>
<li><b>NEW:</b> Restored support for MSVC in <code>/std:c++17</code> mode, and for MSVC's default preprocessor.</li>
<li>Remove the implicit conversion from views to containers.</li>
<li>Rename the following entities to be consistent with C++20's <code>std::ranges</code> support:<ul>
<li><code>safe_range&lt;R&gt;</code> -&gt; <code>borrowed_range&lt;R&gt;</code></li>
<li><code>enable_safe_range&lt;R&gt;</code> -&gt; <code>enable_borrowed_range&lt;R&gt;</code></li>
<li><code>safe_iterator_t&lt;R&gt;</code> -&gt; <code>borrowed_iterator_t&lt;R&gt;</code></li>
<li><code>safe_subrange_t&lt;R&gt;</code> -&gt; <code>borrowed_subrange_t&lt;R&gt;</code></li>
<li><code>readable_traits&lt;I&gt;</code> -&gt; <code>indirectly_readable_traits&lt;I&gt;</code></li>
<li><code>readable&lt;I&gt;</code> -&gt; <code>indirectly_readable&lt;I&gt;</code></li>
<li><code>writable&lt;I&gt;</code> -&gt; <code>indirectly_writable&lt;I&gt;</code></li>
</ul>
</li>
<li>Added the following to the <code>ranges::cpp20</code> namespace:<ul>
<li>Algorithm <code>for_each_n</code></li>
<li>Algorithm <code>sample</code></li>
<li>Class <code>view_base</code></li>
<li>Alias <code>views::all_t</code></li>
</ul>
</li>
<li>Type <code>__int128</code> is recognized as "integer-like".</li>
<li>Adds concepts <code>three_way_comparable[_with]</code> when <code>&lt;=&gt;</code> is supported.</li>
<li>Adds concepts <code>partially_ordered[_with]</code>.</li>
<li>Better conformance with C++20's use of the _<code>boolean-testable</code>_ concept.</li>
<li>Support C++20 coroutines.</li>
<li>Honor CMake's <code>CMAKE_CXX_STANDARD</code> variable.</li>
<li>A fix for the cardinality of <code>views::zip[_with]</code> (<a href="https://github.com/ericniebler/range-v3/pull/1486">#1486</a>).</li>
<li>Add <code>view_interface::data()</code> member function.</li>
<li>Add necessary specializations for <code>std::basic_common_reference</code> and <code>std::common_type</code>.</li>
<li>Numerous workarounds for MSVC.</li>
<li>Various CMake fixes and improvements.</li>
<li><code>drop_while_view</code> is not a <code>sized_range</code>.</li>
<li>Added support for Wind River Systems.</li>
<li>Bug fixes to <code>views::group_by</code> (<a href="https://github.com/ericniebler/range-v3/pull/1393">#1393</a>).</li>
<li><code>common_[reference|type]</code> of <code>common_[tuple|pair]</code> now yields a <code>common_[tuple|pair]</code> instead of a <code>std::[tuple|pair]</code> (<a href="https://github.com/ericniebler/range-v3/pull/1422">#1422</a>).</li>
<li>Avoid UB when currying an lvalue in some views and actions (<a href="https://github.com/ericniebler/range-v3/pull/1320">#1320</a>).</li>
</ul>
<p ><b>Credits:</b> I would like to thank the following people who contributed to this release (in no particular order): Christopher Di Bella, @marehr, Casey Carter, Dvir Yitzchaki, Justin Riddell, Johel Ernesto Guerrero Peña, Barry Revzin, Kamlesh Kumar, and Vincas Dargis.</p>
<h1><a class="anchor" id="v0-10-0"></a>
Version 0.10.0 "To Err is Human"</h1>
<p ><em>Released:</em> Dec 6, 2019.</p>
<p ><b>IMPORTANT:</b> Before upgrading, please note that several older compiler versions and build configurations are no longer supported! In particular, MSVC now needs <code>/std:c++latest</code>.</p>
<p ><b>ALSO:</b> When taking a dependency on the <code>range-v3</code>, <code>meta</code>, or <code>concepts</code> libraries via CMake, please now use the namespace qualified target names:</p><ul>
<li><code>range-v3::range-v3</code></li>
<li><code>range-v3<a class="el" href="namespacemeta.html" title="Tiny metaprogramming library.">meta</a></code></li>
<li><code>range-v3::concepts</code></li>
</ul>
<p >Changes:</p><ul>
<li><b>NEW:</b> Rewritten concepts portability layer with simpler macros for better diagnostics.</li>
<li><b>NEW:</b> The <code>views::cache1</code> view caches the most recent value in the range. This can help avoid reevaluation of transformations in complex view pipelines.</li>
<li><b>NEW:</b> <code>ranges::contains</code> algorithm.</li>
<li><b>NEW:</b> <code>enable_safe_range</code> trait for opting in to the <em>forwarding-range</em> concept. These are ranges whose iterators remain valid even after the range itself has been destroyed; <em>e.g.</em>, <code>std::string_view</code> and <code><a class="el" href="structranges_1_1subrange.html">ranges::subrange</a></code>.</li>
<li>The <code>readable</code> concept has changed such that types that are not <em>indirectly</em> readable with <code>operator*</code> (<em>e.g., <code>std::optional</code>) no longer satisfy that concept.</em></li>
<li><em>Using <code>views::join</code> to join a range of xvalue ranges works again.</em></li>
<li><em>The following range access primitives no longer accept temporary containers (_i.e.</em>, they refuse to return references known to be dangling):<ul>
<li><code>range::front</code></li>
<li><code>range::back</code></li>
<li><code>range::at</code></li>
<li><code>range::index</code></li>
</ul>
</li>
<li><code>views::concat</code> with a single argument now simply returns its argument.</li>
<li><code><a class="el" href="structranges_1_1ostream__iterator.html">ranges::ostream_iterator</a>&lt;T&gt;</code> now coerces arguments to <code>T</code> before inserting them into the wrapped ostream.</li>
<li>Smaller iterators for <code>views::transform</code> and <code>views::take_while</code>.</li>
<li><code>actions::split</code> and <code>actions::split_when</code> now support partial application and pipelining (<a href="https://github.com/ericniebler/range-v3/issues/1085">#1085</a>).</li>
<li><code>views::group_by</code> and its iterator both get a <code>.base()</code> member to access the underlying range and iterator, respectively.</li>
<li>Improved diagnostics with clang.</li>
<li>Assorted bug fixes and compiler work-arounds: <a href="https://github.com/ericniebler/range-v3/issues/284">#284</a>, <a href="https://github.com/ericniebler/range-v3/issues/491">#491</a>, <a href="https://github.com/ericniebler/range-v3/issues/499">#499</a>, <a href="https://github.com/ericniebler/range-v3/issues/871">#871</a>, <a href="https://github.com/ericniebler/range-v3/issues/1022">#1022</a>, <a href="https://github.com/ericniebler/range-v3/issues/1043">#1043</a>, <a href="https://github.com/ericniebler/range-v3/issues/1081">#1081</a>, <a href="https://github.com/ericniebler/range-v3/issues/1085">#1085</a>, <a href="https://github.com/ericniebler/range-v3/issues/1101">#1101</a>, <a href="https://github.com/ericniebler/range-v3/issues/1116">#1116</a>, <a href="https://github.com/ericniebler/range-v3/issues/1296">#1296</a>, <a href="https://github.com/ericniebler/range-v3/issues/1305">#1305</a>, and <a href="https://github.com/ericniebler/range-v3/issues/1335">#1335</a>.</li>
</ul>
<p >Many thanks to GitHub users @CaseyCarter, @morinmorin, @h-2, @MichaelWJung, @johelegp, @marehr, @alkino, @xuning97, @BRevzin, and @mpusz for their contributions.</p>
<h1><a class="anchor" id="v0-9-1"></a>
Version 0.9.1</h1>
<p ><em>Released:</em> Sept 1, 2019.</p>
<p >gcc-9.x portability fixes.</p>
<h1><a class="anchor" id="v0-9-0"></a>
Version 0.9.0 "Std::ranger Things"</h1>
<p ><em>Released:</em> Aug 26, 2019.</p>
<p >Bring many interfaces into sync with the C++20 draft.</p>
<ul>
<li><b>NEW:</b> An improved concepts portability layer with macros that use C++20 concepts when the compiler supports them.</li>
<li><b>NEW:</b> An improved directory structure that keeps disjoint parts of the library &ndash; iterators, ranges, algorithms, actions, views, functional programming support, and general utilities &ndash; physically separate.</li>
<li><b>NEW:</b> A <code>RANGES_DEEP_STL_INTEGRATION</code> configuration option that makes your STL implementation default to structural conformance to infer iterator category, as in C++20. Applies to libc++, libstdc++, and MSVC's Standard Library.</li>
<li><b>NEW:</b> A <code>ranges::cpp20</code> namespace that contains all the functionality of C++20's <code>std::ranges</code> namespace.</li>
<li>All concept names have been given standard_case (renamed from PascalCase) and have been harmonized with the C++20 draft.</li>
<li>The following range access customization points no longer accept rvalue ranges by default:<ul>
<li><code>ranges::begin</code></li>
<li><code>ranges::end</code></li>
<li><code>ranges::rbegin</code></li>
<li><code>ranges::rend</code></li>
<li><code>ranges::cbegin</code></li>
<li><code>ranges::cend</code></li>
<li><code>ranges::crbegin</code></li>
<li><code>ranges::crend</code></li>
<li><code>ranges::data</code></li>
<li><code>ranges::cdata</code></li>
</ul>
</li>
<li>Iterators may specify an <code>iterator_concept</code> type alias in addition to <code>iterator_category</code> &ndash; either as a nested type or as a member of a <code>std::iterator_traits</code> specialization &ndash; to denote conformance to the C++20 iterator concepts as distinct from the C++98 iterator requirements. (See <a href="http://wg21.link/p1037">P1037 "Deep Integration of the Ranges TS"</a> for more information.)</li>
<li>The <code>ranges::value_type</code> trait has been renamed to <code>readable_traits</code>.</li>
<li>The <code>ranges::difference_type</code> trait has been renamed to <code>incrementable_traits</code>.</li>
<li>The <code>ranges::iterator_category</code> trait has been deprecated. Specialize <code>std::iterator_traits</code> to non-intrusively specify an iterator's category and (optionally) concept.</li>
<li>Rename the <code>ranges::view</code> namespace to <code>ranges::views</code> and <code>ranges::action</code> to <code>ranges::actions</code> (with deprecated namespace aliases for migration).</li>
<li>Rename <code>view::bounded</code> to <code>views::common</code>.</li>
<li>Rename <code>unreachable</code> to <code>unreachable_sentinel_t</code>.</li>
<li>Change <code>dangling</code> from a class template that wraps an iterator to a class that acts as a placeholder for an iterator that would otherwise dangle.</li>
<li>Implement C++20's <code>subrange</code> as a view that wraps an iterator/sentinel pair; deprecate <code>iterator_range</code>.</li>
<li>Deprecate implicit conversion from view types to containers; rename <code>ranges::to_</code> to <code>ranges::to</code> and extend it to support converting a range-of-ranges to a container-of-containers.</li>
<li>Deprecate the <code>ranges::v3</code> inline versioning namespace.</li>
<li><p class="startli">The following views have had minor changes to bring them into conformance with the C++20 working draft:</p><ul>
<li><code>join_view</code></li>
<li><code>single_view</code></li>
<li><code>empty_view</code></li>
<li><code>split_view</code></li>
<li><code>reverse_view</code></li>
<li><code>all_view</code></li>
<li><code>take_view</code></li>
<li><code>iota_view</code> </li>
</ul>
<p class="startli"><code>iota_view&lt;std::[u]intmax_t&gt;</code>, in particular, is given a user-defined <code>difference_type</code> that avoids integer overflow.</p>
</li>
<li>New names for the iterator and range type aliases: <table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Old Name </th><th class="markdownTableHeadNone">New Name </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>value_type_t</code> </td><td class="markdownTableBodyNone"><code>iter_value_t</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>reference_t</code> </td><td class="markdownTableBodyNone"><code>iter_reference_t</code> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>difference_type_t</code> </td><td class="markdownTableBodyNone"><code>iter_difference_t</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>size_type_t</code> </td><td class="markdownTableBodyNone"><em>deprecated</em> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>rvalue_reference_t</code> </td><td class="markdownTableBodyNone"><code>iter_rvalue_reference_t</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>range_value_type_t</code> </td><td class="markdownTableBodyNone"><code>range_value_t</code> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>range_difference_type_t</code> </td><td class="markdownTableBodyNone"><code>range_difference_t</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>range_size_type_t</code> </td><td class="markdownTableBodyNone"><code>range_size_t</code> </td></tr>
</table>
</li>
</ul>
<h1><a class="anchor" id="v0-5-0"></a>
Version 0.5.0</h1>
<p ><em>Released:</em> Apr 30, 2019.</p>
<ul>
<li><b>NEW:</b> MSVC support, from @CaseyCarter :tada: (See the docs for the list of supported compilers.)</li>
<li><b>NEW:</b> <code>view::enumerate</code>, from @MikeGitb</li>
<li><b>NEW:</b> <code>view::addressof</code>, from @tower120</li>
<li><b>NEW:</b> <code>unstable_remove_if</code> algorithm and action, from @tower120</li>
<li><b>NEW:</b> <code>adjacent_remove_if</code> algorithm and action, from @cjdb</li>
<li><b>NEW:</b> <code>ostream_joiner</code>, from @sv1990</li>
<li><code>view::drop_while</code> and <code>view::take_while</code> get projection support, from @mrpi</li>
<li><code>view::filter</code> and <code>view::remove_if</code> get projection support, from @mrpi</li>
<li><code>view::unique</code> accepts optional comparison operator, from @tete17</li>
<li><code>action::slice</code> supports sliding from the end, from @tete17</li>
<li>Support coroutines on MSVC, from @CaseyCarter</li>
<li>Faster <code>view::generate_n</code>, from GitHub user @tower120</li>
<li>Improved aligned new detection for libc++ on iOS, from @mtak-</li>
<li>Various CMake improvements, from @johelegp</li>
<li><code>view_adaptor</code> supports <code>basic_iterator</code>-style mixins, from @tower120</li>
<li>Fix <code>ranges::advance</code> for random-access iterators for <code>n==0</code>, from @tower120</li>
<li>Bugs fixed: <a href="https://github.com/ericniebler/range-v3/issues/755">#755</a>, <a href="https://github.com/ericniebler/range-v3/issues/759">#759</a>, <a href="https://github.com/ericniebler/range-v3/issues/942">#942</a>, <a href="https://github.com/ericniebler/range-v3/issues/946">#946</a>, <a href="https://github.com/ericniebler/range-v3/issues/952">#952</a>, <a href="https://github.com/ericniebler/range-v3/issues/975">#975</a>, <a href="https://github.com/ericniebler/range-v3/issues/978">#978</a>, <a href="https://github.com/ericniebler/range-v3/issues/986">#986</a>, <a href="https://github.com/ericniebler/range-v3/issues/996">#996</a>, <a href="https://github.com/ericniebler/range-v3/issues/1041">#1041</a>, <a href="https://github.com/ericniebler/range-v3/issues/1047">#1047</a>, <a href="https://github.com/ericniebler/range-v3/issues/1088">#1088</a>, <a href="https://github.com/ericniebler/range-v3/issues/1094">#1094</a>, <a href="https://github.com/ericniebler/range-v3/issues/1107">#1107</a>, <a href="https://github.com/ericniebler/range-v3/issues/1129">#1129</a></li>
</ul>
<h1><a class="anchor" id="v0-4-0"></a>
Version 0.4.0</h1>
<p ><em>Released:</em> Oct 18, 2018.</p>
<ul>
<li>Minor interface-breaking changes:<ul>
<li><code>single_view</code> returns by <code>const &amp;</code> (see <a href="https://github.com/ericniebler/range-v3/issues/817">#817</a>).</li>
<li><code>reverse_view</code> of a non-Sized, non-Bounded RandomAccess range (eg., a null-terminated string) no longer satisfies SizedRange.</li>
<li>The <code>generate</code> and <code>generate_n</code> views now return the generated values by xvalue reference (<code>T &amp;&amp;</code>) to the value cached within the view (see <a href="https://github.com/ericniebler/range-v3/issues/905">#905</a>).</li>
<li>Views no longer prefer returning constant iterators when they can; some views have different constant and mutable iterators.</li>
</ul>
</li>
<li>Enhancements:<ul>
<li>Views can successfully adapt other views that have different constant and mutable iterators.</li>
<li>The <code>single</code> and <code>empty</code> views are much closer to the versions as specified in <a href="http://wg21.link/P0896">P0896</a>.</li>
</ul>
</li>
<li>Bug fixes:<ul>
<li>"single_view should not copy the value" <a href="https://github.com/ericniebler/range-v3/issues/817">#817</a>.</li>
<li>"Calling back() on strided range does not return the correct last value in range" <a href="https://github.com/ericniebler/range-v3/issues/901">#901</a>.</li>
<li>"generate(foo) | take(n) calls foo n+1 times" <a href="https://github.com/ericniebler/range-v3/issues/819">#819</a>.</li>
<li>"generate seems broken with move-only return types" <a href="https://github.com/ericniebler/range-v3/issues/905">#905</a>.</li>
<li>"Unexpected behavior in generate with return by reference" <a href="https://github.com/ericniebler/range-v3/issues/807">#807</a>.</li>
<li>"Inconsistent behaviour of ranges::distance with ranges::view::zip using infinite views." <a href="https://github.com/ericniebler/range-v3/issues/783">#783</a>.</li>
<li>"Infinite loop when using ranges::view::cycle with an infinite range" <a href="https://github.com/ericniebler/range-v3/issues/780">#780</a>.</li>
<li>"Composing ranges::view::cycle with ranges::view::slice" <a href="https://github.com/ericniebler/range-v3/issues/778">#778</a>.</li>
<li>"cartesian_product view, now with moar bugs." <a href="https://github.com/ericniebler/range-v3/issues/919">#919</a>.</li>
</ul>
</li>
</ul>
<h1><a class="anchor" id="v0-3-7"></a>
Version 0.3.7</h1>
<p ><em>Released:</em> Sept 19, 2018.</p>
<ul>
<li>Improved support for clang-cl (thanks to @CaseyCarter).</li>
<li>Fix for <code>any_view&lt;T, category::sized | category::input&gt;</code> (see #869).</li>
<li>Fix <code>iter_move</code> of a <code>ranges::reverse_iterator</code> (see #888).</li>
<li>Fix <code>move_sentinel</code> comparisons (see #889).</li>
<li>Avoid ambiguity created by <code>boost::advance</code> and <code>std::advance</code> (see #893).</li>
</ul>
<h1><a class="anchor" id="v0-3-6"></a>
Version 0.3.6</h1>
<p ><em>Released:</em> May 15, 2018.</p>
<ul>
<li>NEW: <code>view::exclusive_scan</code> (thanks to GitHub user @mitsutaka-takeda).</li>
<li>All views get non-<code>const</code> overloads of <code>.<a class="el" href="group__list.html#gae64f0978e680ad1a96438c0756b4644d" title="An Boolean integral constant wrapper around true if L is an empty type list; false,...">empty()</a></code> and <code>.<a class="el" href="group__list.html#ga82704ab3563d63460b7ac1be6c9876c9" title="An integral constant wrapper that is the size of the meta::list L.">size()</a></code> (see <a href="https://github.com/ericniebler/stl2/issues/793">ericniebler/stl2#793</a>).</li>
<li>Upgrade Conan support for conan 1.0.</li>
<li><code>subspan</code> interface tweaks.</li>
<li>Fix bug in <code>view::split</code> (see <a href="https://stackoverflow.com/questions/49015671">this stackoverflow question</a>).</li>
<li>Fix bug in <code>view::stride</code> (see <a href="https://github.com/ericniebler/stl2/issues/805">ericniebler/stl2#805</a>).</li>
<li>Fix <code>const</code>-correctness problem in <code>view::chunk</code> (see <a href="https://stackoverflow.com/questions/49210190">this stackoverflow question</a>).</li>
<li>Replace uses of <code>ranges::result_of</code> with <code><a class="el" href="structranges_1_1invoke__result.html">ranges::invoke_result</a></code>.</li>
<li>Fix potential buffer overrun of <code>view::drop</code> over RandomAccessRanges.</li>
<li>Lots of <code>view::cartesian_product</code> fixes (see <a href="https://github.com/ericniebler/stl2/issues/820">ericniebler/stl2#820</a>, <a href="https://github.com/ericniebler/stl2/issues/823">ericniebler/stl2#823</a>).</li>
<li>Work around gcc-8 regression regarding <code>volatile</code> <code>std::initializer_list</code>s (see <a href="https://github.com/ericniebler/stl2/issues/826">ericniebler/stl2#826</a>).</li>
<li>Fix <code>const</code>-correctness problem of <code>view::take</code>.</li>
</ul>
<h1><a class="anchor" id="v0-3-5"></a>
Version 0.3.5</h1>
<p ><em>Released:</em> February 17, 2018.</p>
<ul>
<li>Rvalues may satisfy <code>Writable</code> (see <a href="https://github.com/ericniebler/stl2/issues/387">ericniebler/stl2#387</a>).</li>
<li><code>view_interface</code> gets a bounds-checking <code>at</code> method.</li>
<li><code>chunk_view</code> works on Input ranges.</li>
<li>Fix bug in <code>group_by_view</code>.</li>
<li>Improved concept checks for <code>partial_sum</code> numeric algorithm.</li>
<li>Define <code>ContiguousIterator</code> concept and <code>contiguous_iterator_tag</code> iterator category tag.</li>
<li>Sundry <code>span</code> fixes.</li>
<li><code>action::insert</code> avoids interfering with <code>vector</code>'s exponentional growth strategy.</li>
<li>Add an experimental <code>shared</code> view for views that need container-like scratch space to do their work.</li>
<li>Faster, simpler <code>reverse_view</code>.</li>
<li>Rework <code><a class="el" href="structranges_1_1reference__wrapper.html">ranges::reference_wrapper</a></code> to avoid <a href="https://wg21.link/lwg2993">LWG#2993</a>.</li>
<li>Reworked <code>any_view</code>, the type-erased view wrapper.</li>
<li><code>equal</code> algorithm is <code>constexpr</code> in C++14.</li>
<li><code>stride_view</code> no longer needs an <code>atomic</code> data member.</li>
<li><code>const</code>-correct <code>drop_view</code>.</li>
<li><code>adjacent_filter_view</code> supports bidirectional iteration.</li>
<li>Massive <code>view_adaptor</code> cleanup to remove the need for a <code>mutable</code> data member holding the adapted view.</li>
<li>Fix <code>counting_iterator</code> post-increment bug.</li>
<li><code>tail_view</code> of an empty range is an empty range, not undefined behavior.</li>
<li>Various portability fixes for gcc and clang trunk.</li>
</ul>
<h1><a class="anchor" id="v0-3-0"></a>
Version 0.3.0</h1>
<p ><em>Released:</em> June 30, 2017.</p>
<ul>
<li>Input views may now be move-only (from @CaseyCarter)</li>
<li>Input <code>any_view</code>s are now <em>much</em> more efficient (from @CaseyCarter)</li>
<li>Better support for systems lacking a working <code>&lt;thread&gt;</code> header (from @CaseyCarter)</li>
</ul>
<h1><a class="anchor" id="v0-2-6"></a>
Version 0.2.6</h1>
<p ><em>Released:</em> June 21, 2017.</p>
<ul>
<li>Experimental coroutines with <code>ranges::experimental::generator</code> (from @CaseyCarter)</li>
<li><code><a class="el" href="structranges_1_1optional.html">ranges::optional</a></code> now behaves like <code>std::optional</code> (from @CaseyCarter)</li>
<li>Extensive bug fixes with Input ranges (from @CaseyCarter)</li>
</ul>
<h1><a class="anchor" id="v0-2-5"></a>
Version 0.2.5</h1>
<p ><em>Released:</em> May 16, 2017.</p>
<ul>
<li><code>view::chunk</code> works on Input ranges (from @CaseyCarter)</li>
<li><code>for_each_n</code> algorithm (from @khlebnikov)</li>
<li>Portability fixes for MinGW, clang-3.6 and -3.7, and gcc-7; and cmake 3.0</li>
</ul>
<h1><a class="anchor" id="v0-2-4"></a>
Version 0.2.4</h1>
<p ><em>Released:</em> April 12, 2017.</p>
<p >Fix the following bug:</p><ul>
<li><code>action::stable_sort</code> of <code>vector</code> broken on Clang 3.8.1 since ~last Xmas (ericniebler/range-v3#632).</li>
</ul>
<h1><a class="anchor" id="v0-2-3"></a>
Version 0.2.3</h1>
<p ><em>Released:</em> April 4, 2017.</p>
<p >Fix the following bug:</p><ul>
<li>iterators that return move-only types by value do not satisfy Readable (ericniebler/stl2#399).</li>
</ul>
<h1><a class="anchor" id="v0-2-2"></a>
Version 0.2.2</h1>
<p ><em>Released:</em> March 30, 2017.</p>
<p >New in this release:</p><ul>
<li><code>view::linear_distribute(from,to,n)</code> - A view of <code>n</code> elements between <code>from</code> and <code>to</code>, distributed evenly.</li>
<li><code>view::indices(n)</code> - A view of the indices <code>[0,1,2...n-1]</code>.</li>
<li><code>view::closed_indices(n)</code> - A view of the indices <code>[0,1,2...n]</code>.</li>
</ul>
<p >This release deprecates <code>view::ints(n)</code> as confusing to new users.</p>
<h1><a class="anchor" id="v0-2-1"></a>
Version 0.2.1</h1>
<p ><em>Released:</em> March 22, 2017.</p>
<p >New in this release:</p><ul>
<li><code>view::cartesian_product</code></li>
<li><code>action::reverse</code></li>
</ul>
<h1><a class="anchor" id="v0-2-0"></a>
Version 0.2.0</h1>
<p ><em>Released:</em> March 13, 2017.</p>
<p >Bring many interfaces into sync with the Ranges TS.</p><ul>
<li>Many interfaces are simply renamed. The following table shows the old names and the new. (All names are in the <code>ranges::v3</code> namespace.) <table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Old Name </th><th class="markdownTableHeadNone">New Name </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>indirect_swap</code> </td><td class="markdownTableBodyNone"><code>iter_swap</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>indirect_move</code> </td><td class="markdownTableBodyNone"><code>iter_move</code> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>iterator_value_t</code> </td><td class="markdownTableBodyNone"><code>value_type_t</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>iterator_reference_t</code> </td><td class="markdownTableBodyNone"><code>reference_t</code> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>iterator_difference_t</code> </td><td class="markdownTableBodyNone"><code>difference_type_t</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>iterator_size_t</code> </td><td class="markdownTableBodyNone"><code>size_type_t</code> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>iterator_rvalue_reference_t</code> </td><td class="markdownTableBodyNone"><code>rvalue_reference_t</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>iterator_common_reference_t</code> </td><td class="markdownTableBodyNone"><code>iter_common_reference_t</code> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>range_value_t</code> </td><td class="markdownTableBodyNone"><code>range_value_type_t</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>range_difference_t</code> </td><td class="markdownTableBodyNone"><code>range_difference_type_t</code> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>range_size_t</code> </td><td class="markdownTableBodyNone"><code>range_size_type_t</code> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone"><code>range_iterator_t</code> </td><td class="markdownTableBodyNone"><code>iterator_t</code> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><code>range_sentinel_t</code> </td><td class="markdownTableBodyNone"><code>sentinel_t</code> </td></tr>
</table>
</li>
<li><code>common_iterator</code> now requires that its two types (<code>Iterator</code> and <code>Sentinel</code>) are different. Use <code>common_iterator_t&lt;I, S&gt;</code> to get the old behavior (i.e., if the two types are the same, it is an alias for <code>I</code>; otherwise, it is <code>common_iterator&lt;I, S&gt;</code>).</li>
<li>The following iterator adaptors now work with iterators that return proxies from their postfix increment operator (i.e., <code>operator++(int)</code>):<ul>
<li><code>common_iterator</code></li>
<li><code>counted_iterator</code></li>
</ul>
</li>
<li><p class="startli">The following customization points are now implemented per the Ranges TS spec and will no longer find the associated unconstrained overload in namespace <code>std::</code>:</p><ul>
<li><code>ranges::begin</code></li>
<li><code>ranges::end</code></li>
<li><code>ranges::size</code></li>
<li><code>ranges::swap</code></li>
<li><code>ranges::iter_swap</code></li>
</ul>
<p class="startli">(In practice, this has very little effect but it may effect overloading in rare situations.)</p>
</li>
<li><code>ranges::is_swappable</code> now only takes one template parameter. The new <code>ranges::is_swappable_with&lt;T, U&gt;</code> tests whether <code>T</code> and <code>U</code> are swappable. <code>ranges::is_swappable&lt;T&gt;</code> is equivalent to <code>ranges::is_swappable_with&lt;T &amp;, T &amp;&gt;</code>.</li>
<li>The following object concepts have changed to conform with the Ranges TS specification, and approved changes (see <a href="http://wg21.link/p0547">P0547</a>):<ul>
<li><code>Destructible</code></li>
<li><code>Constructible</code></li>
<li><code>DefaultConstructible</code></li>
<li><code>MoveConstructible</code></li>
<li><code>MoveConstructible</code></li>
<li><code>Movable</code></li>
<li><code>Assignable</code></li>
</ul>
</li>
<li>The <code>View</code> concept is no longer satisfied by reference types.</li>
<li>The syntax for defining a concept has changed slightly. See <a href="https://github.com/ericniebler/range-v3/blob/master/include/range/v3/iterator/concepts.hpp">iterator/concepts.hpp</a> for examples.</li>
</ul>
<h1><a class="anchor" id="v0-1-1"></a>
Version 0.1.1</h1>
<ul>
<li>Small tweak to <code>Writable</code> concept to fix #537.</li>
</ul>
<h1><a class="anchor" id="v0-1-0"></a>
Version 0.1.0</h1>
<ul>
<li>March 8, 2017, Begin semantic versioning </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>