aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2017-12-27 19:43:33 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2017-12-27 19:43:33 +0000
commitc41743d0c0d498bd55c91285d5324b02bed7fb54 (patch)
tree28e606516f0b63f89bdf32341802267c3e27631a
parentaefd636b3cc00e1aa37537f9fa3a8381883a1d19 (diff)
downloadgcc-c41743d0c0d498bd55c91285d5324b02bed7fb54.zip
gcc-c41743d0c0d498bd55c91285d5324b02bed7fb54.tar.gz
gcc-c41743d0c0d498bd55c91285d5324b02bed7fb54.tar.bz2
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
-rw-r--r--libstdc++-v3/ChangeLog9
-rw-r--r--libstdc++-v3/doc/xml/manual/intro.xml6
-rw-r--r--libstdc++-v3/include/bits/regex.h2
-rw-r--r--libstdc++-v3/testsuite/28_regex/match_results/typedefs.cc7
4 files changed, 23 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index bc523a0..88b6b2b 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,12 @@
+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>
PR libstdc++/83237
diff --git a/libstdc++-v3/doc/xml/manual/intro.xml b/libstdc++-v3/doc/xml/manual/intro.xml
index 2df9c5f..03d59f9 100644
--- a/libstdc++-v3/doc/xml/manual/intro.xml
+++ b/libstdc++-v3/doc/xml/manual/intro.xml
@@ -968,6 +968,12 @@ requirements of the license of GCC.
<code>constexpr</code> to <code>addressof</code> for C++17 and later.
</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>:
<emphasis><code>tuple_size</code> should always derive from <code>integral_constant&lt;size_t, N&gt;</code></emphasis>
</term>
diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h
index 32e7159..74c5100 100644
--- a/libstdc++-v3/include/bits/regex.h
+++ b/libstdc++-v3/include/bits/regex.h
@@ -1541,7 +1541,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
//@{
typedef sub_match<_Bi_iter> value_type;
typedef const value_type& const_reference;
- typedef const_reference reference;
+ typedef value_type& reference;
typedef typename _Base_type::const_iterator const_iterator;
typedef const_iterator iterator;
typedef typename __iter_traits::difference_type difference_type;
diff --git a/libstdc++-v3/testsuite/28_regex/match_results/typedefs.cc b/libstdc++-v3/testsuite/28_regex/match_results/typedefs.cc
index fb39b5b..62c4cf7 100644
--- a/libstdc++-v3/testsuite/28_regex/match_results/typedefs.cc
+++ b/libstdc++-v3/testsuite/28_regex/match_results/typedefs.cc
@@ -39,4 +39,11 @@ test01()
typedef mr::allocator_type allocator_type;
typedef mr::char_type char_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, "");
}