Commit c41743d0 by Jonathan Wakely Committed by Jonathan Wakely

PR libstdc++/83538 fix std::match_results<T>::reference (LWG 2306)

	PR libstdc++/83538
	* doc/xml/manual/intro.xml: Document LWG 2306 change.
	* include/bits/regex.h (match_results::reference): Change to
	non-const reference.
	* testsuite/28_regex/match_results/typedefs.cc: Check types are
	correct.

From-SVN: r256012
parent aefd636b
2017-12-27 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/83538
* doc/xml/manual/intro.xml: Document LWG 2306 change.
* include/bits/regex.h (match_results::reference): Change to
non-const reference.
* testsuite/28_regex/match_results/typedefs.cc: Check types are
correct.
2017-12-24 Michele Pezzutti <mpezz@tiscali.it> 2017-12-24 Michele Pezzutti <mpezz@tiscali.it>
PR libstdc++/83237 PR libstdc++/83237
......
...@@ -968,6 +968,12 @@ requirements of the license of GCC. ...@@ -968,6 +968,12 @@ requirements of the license of GCC.
<code>constexpr</code> to <code>addressof</code> for C++17 and later. <code>constexpr</code> to <code>addressof</code> for C++17 and later.
</para></listitem></varlistentry> </para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2306"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2306">2306</link>:
<emphasis><code>match_results::reference</code> should be <code>value_type&amp;</code>, not <code>const value_type&amp;</code></emphasis>
</term>
<listitem><para>Change typedef.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2313"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2313">2313</link>: <varlistentry xml:id="manual.bugs.dr2313"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2313">2313</link>:
<emphasis><code>tuple_size</code> should always derive from <code>integral_constant&lt;size_t, N&gt;</code></emphasis> <emphasis><code>tuple_size</code> should always derive from <code>integral_constant&lt;size_t, N&gt;</code></emphasis>
</term> </term>
......
...@@ -1541,7 +1541,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 ...@@ -1541,7 +1541,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
//@{ //@{
typedef sub_match<_Bi_iter> value_type; typedef sub_match<_Bi_iter> value_type;
typedef const value_type& const_reference; typedef const value_type& const_reference;
typedef const_reference reference; typedef value_type& reference;
typedef typename _Base_type::const_iterator const_iterator; typedef typename _Base_type::const_iterator const_iterator;
typedef const_iterator iterator; typedef const_iterator iterator;
typedef typename __iter_traits::difference_type difference_type; typedef typename __iter_traits::difference_type difference_type;
......
...@@ -39,4 +39,11 @@ test01() ...@@ -39,4 +39,11 @@ test01()
typedef mr::allocator_type allocator_type; typedef mr::allocator_type allocator_type;
typedef mr::char_type char_type; typedef mr::char_type char_type;
typedef mr::string_type string_type; typedef mr::string_type string_type;
static_assert(std::is_same<value_type, std::sub_match<char*>>::value, "");
static_assert(std::is_same<const_reference, const value_type&>::value, "");
static_assert(std::is_same<reference, value_type&>::value, "DR 2306");
static_assert(std::is_same<const_iterator, iterator>::value, "");
static_assert(std::is_same<char_type, char>::value, "");
static_assert(std::is_same<string_type, std::string>::value, "");
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment