aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2022-10-08 10:19:23 +0200
committerMartin Liska <mliska@suse.cz>2022-10-08 10:19:23 +0200
commitd9e7934d25da4a78ffef1f738206aa1d897911df (patch)
tree1bd1697c14259e095f4b4790946eae7df0c5a2e3 /libstdc++-v3
parentda0970e441345f8349522ff1abac5c223044ebb1 (diff)
parent6ffbf87ca66f4ed9cd79cff675fabe2109e46e85 (diff)
downloadgcc-d9e7934d25da4a78ffef1f738206aa1d897911df.zip
gcc-d9e7934d25da4a78ffef1f738206aa1d897911df.tar.gz
gcc-d9e7934d25da4a78ffef1f738206aa1d897911df.tar.bz2
Merge branch 'master' into devel/sphinx
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog102
-rw-r--r--libstdc++-v3/acinclude.m422
-rwxr-xr-xlibstdc++-v3/configure37
-rw-r--r--libstdc++-v3/doc/html/manual/bugs.html400
-rw-r--r--libstdc++-v3/doc/xml/manual/intro.xml387
-rw-r--r--libstdc++-v3/include/Makefile.in101
-rw-r--r--libstdc++-v3/include/bits/functexcept.h25
-rw-r--r--libstdc++-v3/include/bits/invoke.h2
-rw-r--r--libstdc++-v3/include/bits/random.h39
-rw-r--r--libstdc++-v3/include/bits/std_function.h10
-rw-r--r--libstdc++-v3/include/c_global/cstdint59
-rw-r--r--libstdc++-v3/include/ext/random6
-rw-r--r--libstdc++-v3/include/std/bitset8
-rw-r--r--libstdc++-v3/include/std/coroutine10
-rw-r--r--libstdc++-v3/include/std/functional7
-rw-r--r--libstdc++-v3/include/std/ranges483
-rw-r--r--libstdc++-v3/include/std/type_traits33
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc2
-rw-r--r--libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc103
19 files changed, 1324 insertions, 512 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index be69777..68f9a1d 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,105 @@
+2022-10-07 Jonathan Wakely <jwakely@redhat.com>
+
+ * acinclude.m4 (GLIBCXX_ENABLE_HOSTED): Add libstdcxx-hosted
+ enable arg as an alias for hosted-libstdcxx enable arg.
+ * configure: Regenerate.
+
+2022-10-07 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/bits/std_function.h: Include <new> but do not include
+ <bits/stl_function.h>.
+ * include/std/functional: Do not include <new>.
+
+2022-10-07 Jonathan Wakely <jwakely@redhat.com>
+
+ * doc/xml/manual/intro.xml: Add role="bold" attribute to
+ emphasis elements for issue titles.
+ * doc/html/manual/bugs.html: Regenerate.
+
+2022-10-05 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/Makefile.in: Regenerate.
+
+2022-10-05 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/bits/invoke.h (__invoke_r): Check
+ __has_builtin(__reference_converts_from_temporary) before using
+ built-in.
+
+2022-10-04 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/std/ranges/adaptors/join_with/1.cc: Remove unused
+ <sstream header.
+ (test04): Remove constexpr for old std::string ABI and test at
+ runtime.
+
+2022-10-04 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/std/type_traits (remove_cv): Use __remove_cv built-in.
+ (remove_reference): Use __remove_reference built-in.
+ (remove_cvref): Use __remove_cvref built-in. Remove inheritance
+ for fallback implementation.
+
+2022-10-04 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/bits/random.h (__is_seed_seq): Replace with ...
+ (_If_seed_seq_for): ... this.
+ * include/ext/random: Adjust to use _If_seed_seq_for.
+
+2022-10-04 Patrick Palka <ppalka@redhat.com>
+
+ * include/std/ranges (join_with_view::_Iterator::operator*):
+ Replace use of std::visit with manual visitation.
+ (join_with_view::_Iterator::operator++): Likewise.
+ (join_with_view::_Iterator::operator--): Likewise.
+ (join_with_view::_Iterator::iter_move): Likewise.
+ (join_with_view::_Iterator::iter_swap): Likewise.
+
+2022-10-04 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/25_algorithms/stable_sort/mem_check.cc: Do nto run
+ for freestanding.
+
+2022-10-04 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/107139
+ * include/std/coroutine: Remove all _GLIBCXXHOSTED preprocessor
+ conditionals.
+
+2022-10-04 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/107134
+ * include/c_global/cstdint [!_GLIBCXX_HOSTED]: Include
+ <stdint-gcc.h> directly.
+
+2022-10-04 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/107135
+ * include/bits/functexcept.h [!_GLIBCXX_HOSTED]
+ (__throw_invalid_argument, __throw_out_of_range)
+ (__throw_out_of_range_fmt, __throw_runtime_error)
+ (__throw_overflow_error): Define inline.
+ * include/std/bitset (_M_copy_from_ptr) [!_GLIBCXX_HOSTED]:
+ Replace __builtin_abort with __throw_invalid_argument.
+
+2022-10-04 Patrick Palka <ppalka@redhat.com>
+
+ * include/std/ranges: Include <variant> for C++23.
+ (__detail::__compatible_joinable_ranges): Define.
+ (__detail::__bidirectional_common): Define.
+ (join_with_view): Define.
+ (join_with_view::_Iterator): Define.
+ (join_with_view::_Sentinel): Define.
+ (views::__detail::__can_join_with_view): Define.
+ (views::_JoinWith, views::join_with): Define.
+ * testsuite/std/ranges/adaptors/join_with/1.cc: New test.
+
+2022-10-04 Arsen Arsenović <arsen@aarsen.me>
+
+ * include/std/iostream: Use ///< for inline documentation.
+ * include/std/limits: Likewise.
+ * include/experimental/internet: Likewise.
+
2022-10-03 Jonathan Wakely <jwakely@redhat.com>
* doc/xml/manual/status_cxx2020.xml: Update C++20 status.
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 1b404d7..719eab1 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -2962,6 +2962,10 @@ dnl installing only the headers required by [17.4.1.3] and the language
dnl support library. More than that will be built (to keep the Makefiles
dnl conveniently clean), but not installed.
dnl
+dnl Also define --disable-libstdcxx-hosted as an alias for
+dnl --disable-hosted-libstdcxx but fail if both are given
+dnl and their values do not agree.
+dnl
dnl Sets:
dnl is_hosted (yes/no)
dnl
@@ -2971,7 +2975,8 @@ dnl
AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
AC_ARG_ENABLE([hosted-libstdcxx],
AC_HELP_STRING([--disable-hosted-libstdcxx],
- [only build freestanding C++ runtime support]),,
+ [only build freestanding C++ runtime support]),
+ [enable_hosted_libstdcxx_was_given=yes],
[case "$host" in
arm*-*-symbianelf*)
enable_hosted_libstdcxx=no
@@ -2980,6 +2985,21 @@ AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
enable_hosted_libstdcxx=yes
;;
esac])
+
+ # Because most configure args are --enable-libstdcxx-foo add an alias
+ # of that form for --enable-hosted-libstdcxx.
+ AC_ARG_ENABLE([libstdcxx-hosted],
+ AC_HELP_STRING([--disable-libstdcxx-hosted],
+ [alias for --disable-hosted-libstdcxx]),
+ [if test "$enable_hosted_libstdcxx_was_given" = yes; then
+ if test "$enable_hosted_libstdcxx" != "$enableval"; then
+ AC_MSG_ERROR([--enable-libstdcxx-hosted=$enableval conflicts with --enable-hosted-libstdcxx=$enable_hosted_libstdcxx])
+ fi
+ else
+ enable_hosted_libstdcxx=${enableval}
+ fi
+ ],)
+
freestanding_flags=
if test "$enable_hosted_libstdcxx" = no; then
AC_MSG_NOTICE([Only freestanding libraries will be built])
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 4f2c12f..7ead77a 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -922,6 +922,7 @@ enable_fast_install
with_gnu_ld
enable_libtool_lock
enable_hosted_libstdcxx
+enable_libstdcxx_hosted
enable_libstdcxx_verbose
enable_libstdcxx_pch
with_libstdcxx_lock_policy
@@ -1610,6 +1611,8 @@ Optional Features:
--disable-libtool-lock avoid locking (might break parallel builds)
--disable-hosted-libstdcxx
only build freestanding C++ runtime support
+ --disable-libstdcxx-hosted
+ alias for --disable-hosted-libstdcxx
--disable-libstdcxx-verbose
disable termination messages to standard error
--enable-libstdcxx-pch build pre-compiled libstdc++ headers
@@ -12200,7 +12203,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12203 "configure"
+#line 12206 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12306,7 +12309,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12309 "configure"
+#line 12312 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -15635,7 +15638,7 @@ postdeps_CXX=`echo " $postdeps_CXX " | sed 's, -lstdc++ ,,g'`
# Check whether --enable-hosted-libstdcxx was given.
if test "${enable_hosted_libstdcxx+set}" = set; then :
- enableval=$enable_hosted_libstdcxx;
+ enableval=$enable_hosted_libstdcxx; enable_hosted_libstdcxx_was_given=yes
else
case "$host" in
arm*-*-symbianelf*)
@@ -15647,6 +15650,22 @@ else
esac
fi
+
+ # Because most configure args are --enable-libstdcxx-foo add an alias
+ # of that form for --enable-hosted-libstdcxx.
+ # Check whether --enable-libstdcxx-hosted was given.
+if test "${enable_libstdcxx_hosted+set}" = set; then :
+ enableval=$enable_libstdcxx_hosted; if test "$enable_hosted_libstdcxx_was_given" = yes; then
+ if test "$enable_hosted_libstdcxx" != "$enableval"; then
+ as_fn_error $? "--enable-libstdcxx-hosted=$enableval conflicts with --enable-hosted-libstdcxx=$enable_hosted_libstdcxx" "$LINENO" 5
+ fi
+ else
+ enable_hosted_libstdcxx=${enableval}
+ fi
+
+fi
+
+
freestanding_flags=
if test "$enable_hosted_libstdcxx" = no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: Only freestanding libraries will be built" >&5
@@ -15990,7 +16009,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
# Fake what AC_TRY_COMPILE does.
cat > conftest.$ac_ext << EOF
-#line 15993 "configure"
+#line 16012 "configure"
int main()
{
typedef bool atomic_type;
@@ -16025,7 +16044,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16028 "configure"
+#line 16047 "configure"
int main()
{
typedef short atomic_type;
@@ -16060,7 +16079,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16063 "configure"
+#line 16082 "configure"
int main()
{
// NB: _Atomic_word not necessarily int.
@@ -16096,7 +16115,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16099 "configure"
+#line 16118 "configure"
int main()
{
typedef long long atomic_type;
@@ -16252,7 +16271,7 @@ $as_echo "mutex" >&6; }
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 16255 "configure"
+#line 16274 "configure"
int main()
{
_Decimal32 d1;
@@ -16294,7 +16313,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 16297 "configure"
+#line 16316 "configure"
template<typename T1, typename T2>
struct same
{ typedef T2 type; };
diff --git a/libstdc++-v3/doc/html/manual/bugs.html b/libstdc++-v3/doc/html/manual/bugs.html
index 8e0bc1f..58600cd 100644
--- a/libstdc++-v3/doc/html/manual/bugs.html
+++ b/libstdc++-v3/doc/html/manual/bugs.html
@@ -26,597 +26,597 @@
of style. Note that we usually do not make changes to the
code until an issue has reached <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#DR" target="_top">DR</a> status.
</p><div class="variablelist"><dl class="variablelist"><dt><a id="manual.bugs.dr5"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#5" target="_top">5</a>:
- <span class="emphasis"><em>string::compare specification questionable</em></span>
+ <span class="bold"><strong>string::compare specification questionable</strong></span>
</span></dt><dd><p>This should be two overloaded functions rather than a single function.
</p></dd><dt><a id="manual.bugs.dr17"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#17" target="_top">17</a>:
- <span class="emphasis"><em>Bad bool parsing</em></span>
+ <span class="bold"><strong>Bad bool parsing</strong></span>
</span></dt><dd><p>Apparently extracting Boolean values was messed up...
</p></dd><dt><a id="manual.bugs.dr19"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#19" target="_top">19</a>:
- <span class="emphasis"><em>"Noconv" definition too vague</em></span>
+ <span class="bold"><strong>"Noconv" definition too vague</strong></span>
</span></dt><dd><p>If <code class="code">codecvt::do_in</code> returns <code class="code">noconv</code> there are
no changes to the values in <code class="code">[to, to_limit)</code>.
</p></dd><dt><a id="manual.bugs.dr22"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#22" target="_top">22</a>:
- <span class="emphasis"><em>Member open vs flags</em></span>
+ <span class="bold"><strong>Member open vs flags</strong></span>
</span></dt><dd><p>Re-opening a file stream does <span class="emphasis"><em>not</em></span> clear the state flags.
</p></dd><dt><a id="manual.bugs.dr23"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#23" target="_top">23</a>:
- <span class="emphasis"><em>Num_get overflow result</em></span>
+ <span class="bold"><strong>Num_get overflow result</strong></span>
</span></dt><dd><p>Implement the proposed resolution.
</p></dd><dt><a id="manual.bugs.dr25"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#25" target="_top">25</a>:
- <span class="emphasis"><em>String operator&lt;&lt; uses width() value wrong</em></span>
+ <span class="bold"><strong>String operator&lt;&lt; uses width() value wrong</strong></span>
</span></dt><dd><p>Padding issues.
</p></dd><dt><a id="manual.bugs.dr48"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#48" target="_top">48</a>:
- <span class="emphasis"><em>Use of non-existent exception constructor</em></span>
+ <span class="bold"><strong>Use of non-existent exception constructor</strong></span>
</span></dt><dd><p>An instance of <code class="code">ios_base::failure</code> is constructed instead.
</p></dd><dt><a id="manual.bugs.dr49"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#49" target="_top">49</a>:
- <span class="emphasis"><em>Underspecification of ios_base::sync_with_stdio</em></span>
+ <span class="bold"><strong>Underspecification of ios_base::sync_with_stdio</strong></span>
</span></dt><dd><p>The return type is the <span class="emphasis"><em>previous</em></span> state of synchronization.
</p></dd><dt><a id="manual.bugs.dr50"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#50" target="_top">50</a>:
- <span class="emphasis"><em>Copy constructor and assignment operator of ios_base</em></span>
+ <span class="bold"><strong>Copy constructor and assignment operator of ios_base</strong></span>
</span></dt><dd><p>These members functions are declared <code class="code">private</code> and are
thus inaccessible. Specifying the correct semantics of
"copying stream state" was deemed too complicated.
</p></dd><dt><a id="manual.bugs.dr60"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#60" target="_top">60</a>:
- <span class="emphasis"><em>What is a formatted input function?</em></span>
+ <span class="bold"><strong>What is a formatted input function?</strong></span>
</span></dt><dd><p>This DR made many widespread changes to <code class="code">basic_istream</code>
and <code class="code">basic_ostream</code> all of which have been implemented.
</p></dd><dt><a id="manual.bugs.dr63"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#63" target="_top">63</a>:
- <span class="emphasis"><em>Exception-handling policy for unformatted output</em></span>
+ <span class="bold"><strong>Exception-handling policy for unformatted output</strong></span>
</span></dt><dd><p>Make the policy consistent with that of formatted input, unformatted
input, and formatted output.
</p></dd><dt><a id="manual.bugs.dr68"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#68" target="_top">68</a>:
- <span class="emphasis"><em>Extractors for char* should store null at end</em></span>
+ <span class="bold"><strong>Extractors for char* should store null at end</strong></span>
</span></dt><dd><p>And they do now. An editing glitch in the last item in the list of
[27.6.1.2.3]/7.
</p></dd><dt><a id="manual.bugs.dr74"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#74" target="_top">74</a>:
- <span class="emphasis"><em>Garbled text for codecvt::do_max_length</em></span>
+ <span class="bold"><strong>Garbled text for codecvt::do_max_length</strong></span>
</span></dt><dd><p>The text of the standard was gibberish. Typos gone rampant.
</p></dd><dt><a id="manual.bugs.dr75"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#75" target="_top">75</a>:
- <span class="emphasis"><em>Contradiction in codecvt::length's argument types</em></span>
+ <span class="bold"><strong>Contradiction in codecvt::length's argument types</strong></span>
</span></dt><dd><p>Change the first parameter to <code class="code">stateT&amp;</code> and implement
the new effects paragraph.
</p></dd><dt><a id="manual.bugs.dr83"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#83" target="_top">83</a>:
- <span class="emphasis"><em>string::npos vs. string::max_size()</em></span>
+ <span class="bold"><strong>string::npos vs. string::max_size()</strong></span>
</span></dt><dd><p>Safety checks on the size of the string should test against
<code class="code">max_size()</code> rather than <code class="code">npos</code>.
</p></dd><dt><a id="manual.bugs.dr90"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#90" target="_top">90</a>:
- <span class="emphasis"><em>Incorrect description of operator&gt;&gt; for strings</em></span>
+ <span class="bold"><strong>Incorrect description of operator&gt;&gt; for strings</strong></span>
</span></dt><dd><p>The effect contain <code class="code">isspace(c,getloc())</code> which must be
replaced by <code class="code">isspace(c,is.getloc())</code>.
</p></dd><dt><a id="manual.bugs.dr91"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#91" target="_top">91</a>:
- <span class="emphasis"><em>Description of operator&gt;&gt; and getline() for string&lt;&gt;
- might cause endless loop</em></span>
+ <span class="bold"><strong>Description of operator&gt;&gt; and getline() for string&lt;&gt;
+ might cause endless loop</strong></span>
</span></dt><dd><p>They behave as a formatted input function and as an unformatted
input function, respectively (except that <code class="code">getline</code> is
not required to set <code class="code">gcount</code>).
</p></dd><dt><a id="manual.bugs.dr103"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#103" target="_top">103</a>:
- <span class="emphasis"><em>set::iterator is required to be modifiable, but this allows
- modification of keys.</em></span>
+ <span class="bold"><strong>set::iterator is required to be modifiable, but this allows
+ modification of keys.</strong></span>
</span></dt><dd><p>For associative containers where the value type is the same as
the key type, both <code class="code">iterator</code> and <code class="code">const_iterator
</code> are constant iterators.
</p></dd><dt><a id="manual.bugs.dr109"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#109" target="_top">109</a>:
- <span class="emphasis"><em>Missing binders for non-const sequence elements</em></span>
+ <span class="bold"><strong>Missing binders for non-const sequence elements</strong></span>
</span></dt><dd><p>The <code class="code">binder1st</code> and <code class="code">binder2nd</code> didn't have an
<code class="code">operator()</code> taking a non-const parameter.
</p></dd><dt><a id="manual.bugs.dr110"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#110" target="_top">110</a>:
- <span class="emphasis"><em>istreambuf_iterator::equal not const</em></span>
+ <span class="bold"><strong>istreambuf_iterator::equal not const</strong></span>
</span></dt><dd><p>This was not a const member function. Note that the DR says to
replace the function with a const one; we have instead provided an
overloaded version with identical contents.
</p></dd><dt><a id="manual.bugs.dr117"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#117" target="_top">117</a>:
- <span class="emphasis"><em>basic_ostream uses nonexistent num_put member functions</em></span>
+ <span class="bold"><strong>basic_ostream uses nonexistent num_put member functions</strong></span>
</span></dt><dd><p><code class="code">num_put::put()</code> was overloaded on the wrong types.
</p></dd><dt><a id="manual.bugs.dr118"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#118" target="_top">118</a>:
- <span class="emphasis"><em>basic_istream uses nonexistent num_get member functions</em></span>
+ <span class="bold"><strong>basic_istream uses nonexistent num_get member functions</strong></span>
</span></dt><dd><p>Same as 117, but for <code class="code">num_get::get()</code>.
</p></dd><dt><a id="manual.bugs.dr129"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#129" target="_top">129</a>:
- <span class="emphasis"><em>Need error indication from seekp() and seekg()</em></span>
+ <span class="bold"><strong>Need error indication from seekp() and seekg()</strong></span>
</span></dt><dd><p>These functions set <code class="code">failbit</code> on error now.
</p></dd><dt><a id="manual.bugs.dr130"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#130" target="_top">130</a>:
- <span class="emphasis"><em>Return type of container::erase(iterator) differs for associative containers</em></span>
+ <span class="bold"><strong>Return type of container::erase(iterator) differs for associative containers</strong></span>
</span></dt><dd><p>Make member <code class="code">erase</code> return iterator for <code class="code">set</code>, <code class="code">multiset</code>, <code class="code">map</code>, <code class="code">multimap</code>.
</p></dd><dt><a id="manual.bugs.dr136"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#136" target="_top">136</a>:
- <span class="emphasis"><em>seekp, seekg setting wrong streams?</em></span>
+ <span class="bold"><strong>seekp, seekg setting wrong streams?</strong></span>
</span></dt><dd><p><code class="code">seekp</code> should only set the output stream, and
<code class="code">seekg</code> should only set the input stream.
</p></dd><dt><a id="manual.bugs.dr167"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#167" target="_top">167</a>:
- <span class="emphasis"><em>Improper use of traits_type::length()</em></span>
+ <span class="bold"><strong>Improper use of traits_type::length()</strong></span>
</span></dt><dd><p><code class="code">op&lt;&lt;</code> with a <code class="code">const char*</code> was
calculating an incorrect number of characters to write.
</p></dd><dt><a id="manual.bugs.dr169"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#169" target="_top">169</a>:
- <span class="emphasis"><em>Bad efficiency of overflow() mandated</em></span>
+ <span class="bold"><strong>Bad efficiency of overflow() mandated</strong></span>
</span></dt><dd><p>Grow efficiently the internal array object.
</p></dd><dt><a id="manual.bugs.dr171"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#171" target="_top">171</a>:
- <span class="emphasis"><em>Strange seekpos() semantics due to joint position</em></span>
+ <span class="bold"><strong>Strange seekpos() semantics due to joint position</strong></span>
</span></dt><dd><p>Quite complex to summarize...
</p></dd><dt><a id="manual.bugs.dr181"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#181" target="_top">181</a>:
- <span class="emphasis"><em>make_pair() unintended behavior</em></span>
+ <span class="bold"><strong>make_pair() unintended behavior</strong></span>
</span></dt><dd><p>This function used to take its arguments as reference-to-const, now
it copies them (pass by value).
</p></dd><dt><a id="manual.bugs.dr195"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#195" target="_top">195</a>:
- <span class="emphasis"><em>Should basic_istream::sentry's constructor ever set eofbit?</em></span>
+ <span class="bold"><strong>Should basic_istream::sentry's constructor ever set eofbit?</strong></span>
</span></dt><dd><p>Yes, it can, specifically if EOF is reached while skipping whitespace.
</p></dd><dt><a id="manual.bugs.dr206"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#206" target="_top">206</a>:
- <span class="emphasis"><em><code class="code">operator new(size_t, nothrow)</code> may become
- unlinked to ordinary <code class="code">operator new</code> if ordinary
- version replaced
- </em></span>
+ <span class="bold"><strong><code class="code">operator new(size_t, nothrow)</code> may become
+ unlinked to ordinary <code class="code">operator new</code> if ordinary
+ version replaced
+ </strong></span>
</span></dt><dd><p>The <code class="code">nothrow</code> forms of new and delete were
changed to call the throwing forms, handling any exception by
catching it and returning a null pointer.
</p></dd><dt><a id="manual.bugs.dr211"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#211" target="_top">211</a>:
- <span class="emphasis"><em>operator&gt;&gt;(istream&amp;, string&amp;) doesn't set failbit</em></span>
+ <span class="bold"><strong>operator&gt;&gt;(istream&amp;, string&amp;) doesn't set failbit</strong></span>
</span></dt><dd><p>If nothing is extracted into the string, <code class="code">op&gt;&gt;</code> now
sets <code class="code">failbit</code> (which can cause an exception, etc., etc.).
</p></dd><dt><a id="manual.bugs.dr214"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#214" target="_top">214</a>:
- <span class="emphasis"><em>set::find() missing const overload</em></span>
+ <span class="bold"><strong>set::find() missing const overload</strong></span>
</span></dt><dd><p>Both <code class="code">set</code> and <code class="code">multiset</code> were missing
overloaded find, lower_bound, upper_bound, and equal_range functions
for const instances.
</p></dd><dt><a id="manual.bugs.dr231"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#231" target="_top">231</a>:
- <span class="emphasis"><em>Precision in iostream?</em></span>
+ <span class="bold"><strong>Precision in iostream?</strong></span>
</span></dt><dd><p>For conversion from a floating-point type, <code class="code">str.precision()</code>
is specified in the conversion specification.
</p></dd><dt><a id="manual.bugs.dr233"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#233" target="_top">233</a>:
- <span class="emphasis"><em>Insertion hints in associative containers</em></span>
+ <span class="bold"><strong>Insertion hints in associative containers</strong></span>
</span></dt><dd><p>Implement N1780, first check before then check after, insert as close
to hint as possible.
</p></dd><dt><a id="manual.bugs.dr235"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#235" target="_top">235</a>:
- <span class="emphasis"><em>No specification of default ctor for reverse_iterator</em></span>
+ <span class="bold"><strong>No specification of default ctor for reverse_iterator</strong></span>
</span></dt><dd><p>The declaration of <code class="code">reverse_iterator</code> lists a default constructor.
However, no specification is given what this constructor should do.
</p></dd><dt><a id="manual.bugs.dr241"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#241" target="_top">241</a>:
- <span class="emphasis"><em>Does unique_copy() require CopyConstructible and Assignable?</em></span>
+ <span class="bold"><strong>Does unique_copy() require CopyConstructible and Assignable?</strong></span>
</span></dt><dd><p>Add a helper for forward_iterator/output_iterator, fix the existing
one for input_iterator/output_iterator to not rely on Assignability.
</p></dd><dt><a id="manual.bugs.dr243"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#243" target="_top">243</a>:
- <span class="emphasis"><em>get and getline when sentry reports failure</em></span>
+ <span class="bold"><strong>get and getline when sentry reports failure</strong></span>
</span></dt><dd><p>Store a null character only if the character array has a non-zero size.
</p></dd><dt><a id="manual.bugs.dr251"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#251" target="_top">251</a>:
- <span class="emphasis"><em>basic_stringbuf missing allocator_type</em></span>
+ <span class="bold"><strong>basic_stringbuf missing allocator_type</strong></span>
</span></dt><dd><p>This nested typedef was originally not specified.
</p></dd><dt><a id="manual.bugs.dr253"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#253" target="_top">253</a>:
- <span class="emphasis"><em>valarray helper functions are almost entirely useless</em></span>
+ <span class="bold"><strong>valarray helper functions are almost entirely useless</strong></span>
</span></dt><dd><p>Make the copy constructor and copy-assignment operator declarations
public in gslice_array, indirect_array, mask_array, slice_array; provide
definitions.
</p></dd><dt><a id="manual.bugs.dr265"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#265" target="_top">265</a>:
- <span class="emphasis"><em>std::pair::pair() effects overly restrictive</em></span>
+ <span class="bold"><strong>std::pair::pair() effects overly restrictive</strong></span>
</span></dt><dd><p>The default ctor would build its members from copies of temporaries;
now it simply uses their respective default ctors.
</p></dd><dt><a id="manual.bugs.dr266"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#266" target="_top">266</a>:
- <span class="emphasis"><em>bad_exception::~bad_exception() missing Effects clause</em></span>
+ <span class="bold"><strong>bad_exception::~bad_exception() missing Effects clause</strong></span>
</span></dt><dd><p>The <code class="code">bad_</code>* classes no longer have destructors (they
are trivial), since no description of them was ever given.
</p></dd><dt><a id="manual.bugs.dr271"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#271" target="_top">271</a>:
- <span class="emphasis"><em>basic_iostream missing typedefs</em></span>
+ <span class="bold"><strong>basic_iostream missing typedefs</strong></span>
</span></dt><dd><p>The typedefs it inherits from its base classes can't be used, since
(for example) <code class="code">basic_iostream&lt;T&gt;::traits_type</code> is ambiguous.
</p></dd><dt><a id="manual.bugs.dr275"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#275" target="_top">275</a>:
- <span class="emphasis"><em>Wrong type in num_get::get() overloads</em></span>
+ <span class="bold"><strong>Wrong type in num_get::get() overloads</strong></span>
</span></dt><dd><p>Similar to 118.
</p></dd><dt><a id="manual.bugs.dr280"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#280" target="_top">280</a>:
- <span class="emphasis"><em>Comparison of reverse_iterator to const reverse_iterator</em></span>
+ <span class="bold"><strong>Comparison of reverse_iterator to const reverse_iterator</strong></span>
</span></dt><dd><p>Add global functions with two template parameters.
(NB: not added for now a templated assignment operator)
</p></dd><dt><a id="manual.bugs.dr292"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#292" target="_top">292</a>:
- <span class="emphasis"><em>Effects of a.copyfmt (a)</em></span>
+ <span class="bold"><strong>Effects of a.copyfmt (a)</strong></span>
</span></dt><dd><p>If <code class="code">(this == &amp;rhs)</code> do nothing.
</p></dd><dt><a id="manual.bugs.dr300"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#300" target="_top">300</a>:
- <span class="emphasis"><em>List::merge() specification incomplete</em></span>
+ <span class="bold"><strong>List::merge() specification incomplete</strong></span>
</span></dt><dd><p>If <code class="code">(this == &amp;x)</code> do nothing.
</p></dd><dt><a id="manual.bugs.dr303"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#303" target="_top">303</a>:
- <span class="emphasis"><em>Bitset input operator underspecified</em></span>
+ <span class="bold"><strong>Bitset input operator underspecified</strong></span>
</span></dt><dd><p>Basically, compare the input character to
<code class="code">is.widen(0)</code> and <code class="code">is.widen(1)</code>.
</p></dd><dt><a id="manual.bugs.dr305"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#305" target="_top">305</a>:
- <span class="emphasis"><em>Default behavior of codecvt&lt;wchar_t, char,
- mbstate_t&gt;::length()</em></span>
+ <span class="bold"><strong>Default behavior of codecvt&lt;wchar_t, char,
+ mbstate_t&gt;::length()</strong></span>
</span></dt><dd><p>Do not specify what <code class="code">codecvt&lt;wchar_t, char,
mbstate_t&gt;::do_length</code> must return.
</p></dd><dt><a id="manual.bugs.dr328"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#328" target="_top">328</a>:
- <span class="emphasis"><em>Bad sprintf format modifier in
- money_put&lt;&gt;::do_put()</em></span>
+ <span class="bold"><strong>Bad sprintf format modifier in
+ money_put&lt;&gt;::do_put()</strong></span>
</span></dt><dd><p>Change the format string to "%.0Lf".
</p></dd><dt><a id="manual.bugs.dr365"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#365" target="_top">365</a>:
- <span class="emphasis"><em>Lack of const-qualification in clause 27</em></span>
+ <span class="bold"><strong>Lack of const-qualification in clause 27</strong></span>
</span></dt><dd><p>Add const overloads of <code class="code">is_open</code>.
</p></dd><dt><a id="manual.bugs.dr387"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#387" target="_top">387</a>:
- <span class="emphasis"><em>std::complex over-encapsulated</em></span>
+ <span class="bold"><strong>std::complex over-encapsulated</strong></span>
</span></dt><dd><p>Add the <code class="code">real(T)</code> and <code class="code">imag(T)</code>
members; in C++11 mode, also adjust the existing
<code class="code">real()</code> and <code class="code">imag()</code> members and
free functions.
</p></dd><dt><a id="manual.bugs.dr389"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#389" target="_top">389</a>:
- <span class="emphasis"><em>Const overload of valarray::operator[] returns
- by value</em></span>
+ <span class="bold"><strong>Const overload of valarray::operator[] returns
+ by value</strong></span>
</span></dt><dd><p>Change it to return a <code class="code">const T&amp;</code>.
</p></dd><dt><a id="manual.bugs.dr396"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#396" target="_top">396</a>:
- <span class="emphasis"><em>what are characters zero and one</em></span>
+ <span class="bold"><strong>what are characters zero and one</strong></span>
</span></dt><dd><p>Implement the proposed resolution.
</p></dd><dt><a id="manual.bugs.dr402"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#402" target="_top">402</a>:
- <span class="emphasis"><em>Wrong new expression in [some_]allocator::construct</em></span>
+ <span class="bold"><strong>Wrong new expression in [some_]allocator::construct</strong></span>
</span></dt><dd><p>Replace "new" with "::new".
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#408" target="_top">408</a>:
- <span class="emphasis"><em>
+ <span class="bold"><strong>
Is vector&lt;reverse_iterator&lt;char*&gt; &gt; forbidden?
- </em></span>
+ </strong></span>
</span></dt><dd><p>Tweak the debug-mode checks in _Safe_iterator.
</p></dd><dt><a id="manual.bugs.dr409"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#409" target="_top">409</a>:
- <span class="emphasis"><em>Closing an fstream should clear the error state</em></span>
+ <span class="bold"><strong>Closing an fstream should clear the error state</strong></span>
</span></dt><dd><p>Have <code class="code">open</code> clear the error flags.
</p></dd><dt><a id="manual.bugs.dr415"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#415" target="_top">415</a>:
- <span class="emphasis"><em>Behavior of std::ws</em></span>
+ <span class="bold"><strong>Behavior of std::ws</strong></span>
</span></dt><dd><p>Change it to be an unformatted input function
(i.e. construct a sentry and catch exceptions).
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#431" target="_top">431</a>:
- <span class="emphasis"><em>Swapping containers with unequal allocators</em></span>
+ <span class="bold"><strong>Swapping containers with unequal allocators</strong></span>
</span></dt><dd><p>Implement Option 3, as per N1599.
</p></dd><dt><a id="manual.bugs.dr432"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#432" target="_top">432</a>:
- <span class="emphasis"><em>stringbuf::overflow() makes only one write position
- available</em></span>
+ <span class="bold"><strong>stringbuf::overflow() makes only one write position
+ available</strong></span>
</span></dt><dd><p>Implement the resolution, beyond DR 169.
</p></dd><dt><a id="manual.bugs.dr434"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#434" target="_top">434</a>:
- <span class="emphasis"><em>bitset::to_string() hard to use</em></span>
+ <span class="bold"><strong>bitset::to_string() hard to use</strong></span>
</span></dt><dd><p>Add three overloads, taking fewer template arguments.
</p></dd><dt><a id="manual.bugs.dr438"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#438" target="_top">438</a>:
- <span class="emphasis"><em>Ambiguity in the "do the right thing" clause</em></span>
+ <span class="bold"><strong>Ambiguity in the "do the right thing" clause</strong></span>
</span></dt><dd><p>Implement the resolution, basically cast less.
</p></dd><dt><a id="manual.bugs.dr445"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#445" target="_top">445</a>:
- <span class="emphasis"><em>iterator_traits::reference unspecified for some iterator categories</em></span>
+ <span class="bold"><strong>iterator_traits::reference unspecified for some iterator categories</strong></span>
</span></dt><dd><p>Change <code class="code">istreambuf_iterator::reference</code> in C++11 mode.
</p></dd><dt><a id="manual.bugs.dr453"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#453" target="_top">453</a>:
- <span class="emphasis"><em>basic_stringbuf::seekoff need not always fail for an empty stream</em></span>
+ <span class="bold"><strong>basic_stringbuf::seekoff need not always fail for an empty stream</strong></span>
</span></dt><dd><p>Don't fail if the next pointer is null and newoff is zero.
</p></dd><dt><a id="manual.bugs.dr455"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#455" target="_top">455</a>:
- <span class="emphasis"><em>cerr::tie() and wcerr::tie() are overspecified</em></span>
+ <span class="bold"><strong>cerr::tie() and wcerr::tie() are overspecified</strong></span>
</span></dt><dd><p>Initialize cerr tied to cout and wcerr tied to wcout.
</p></dd><dt><a id="manual.bugs.dr464"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#464" target="_top">464</a>:
- <span class="emphasis"><em>Suggestion for new member functions in standard containers</em></span>
+ <span class="bold"><strong>Suggestion for new member functions in standard containers</strong></span>
</span></dt><dd><p>Add <code class="code">data()</code> to <code class="code">std::vector</code> and
<code class="code">at(const key_type&amp;)</code> to <code class="code">std::map</code>.
</p></dd><dt><a id="manual.bugs.dr467"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#467" target="_top">467</a>:
- <span class="emphasis"><em>char_traits::lt(), compare(), and memcmp()</em></span>
+ <span class="bold"><strong>char_traits::lt(), compare(), and memcmp()</strong></span>
</span></dt><dd><p>Change <code class="code">lt</code>.
</p></dd><dt><a id="manual.bugs.dr508"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#508" target="_top">508</a>:
- <span class="emphasis"><em>Bad parameters for ranlux64_base_01</em></span>
+ <span class="bold"><strong>Bad parameters for ranlux64_base_01</strong></span>
</span></dt><dd><p>Fix the parameters.
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#512" target="_top">512</a>:
- <span class="emphasis"><em>Seeding subtract_with_carry_01 from a single unsigned long</em></span>
+ <span class="bold"><strong>Seeding subtract_with_carry_01 from a single unsigned long</strong></span>
</span></dt><dd><p>Construct a <code class="code">linear_congruential</code> engine and seed with it.
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-closed.html#526" target="_top">526</a>:
- <span class="emphasis"><em>Is it undefined if a function in the standard changes in
- parameters?</em></span>
+ <span class="bold"><strong>Is it undefined if a function in the standard changes in
+ parameters?</strong></span>
</span></dt><dd><p>Use &amp;value.
</p></dd><dt><a id="manual.bugs.dr538"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#538" target="_top">538</a>:
- <span class="emphasis"><em>241 again: Does unique_copy() require CopyConstructible
- and Assignable?</em></span>
+ <span class="bold"><strong>241 again: Does unique_copy() require CopyConstructible
+ and Assignable?</strong></span>
</span></dt><dd><p>In case of input_iterator/output_iterator rely on Assignability of
input_iterator' value_type.
</p></dd><dt><a id="manual.bugs.dr539"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#539" target="_top">539</a>:
- <span class="emphasis"><em>partial_sum and adjacent_difference should mention
- requirements</em></span>
+ <span class="bold"><strong>partial_sum and adjacent_difference should mention
+ requirements</strong></span>
</span></dt><dd><p>We were almost doing the right thing, just use std::move
in adjacent_difference.
</p></dd><dt><a id="manual.bugs.dr541"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#541" target="_top">541</a>:
- <span class="emphasis"><em>shared_ptr template assignment and void</em></span>
+ <span class="bold"><strong>shared_ptr template assignment and void</strong></span>
</span></dt><dd><p>Add an auto_ptr&lt;void&gt; specialization.
</p></dd><dt><a id="manual.bugs.dr543"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#543" target="_top">543</a>:
- <span class="emphasis"><em>valarray slice default constructor</em></span>
+ <span class="bold"><strong>valarray slice default constructor</strong></span>
</span></dt><dd><p>Follow the straightforward proposed resolution.
</p></dd><dt><a id="manual.bugs.dr550"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#550" target="_top">550</a>:
- <span class="emphasis"><em>What should the return type of pow(float,int) be?</em></span>
+ <span class="bold"><strong>What should the return type of pow(float,int) be?</strong></span>
</span></dt><dd><p>In C++11 mode, remove the pow(float,int), etc., signatures.
</p></dd><dt><a id="manual.bugs.dr581"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#581" target="_top">581</a>:
- <span class="emphasis"><em><code class="code">flush()</code> not unformatted function</em></span>
+ <span class="bold"><strong><code class="code">flush()</code> not unformatted function</strong></span>
</span></dt><dd><p>Change it to be a unformatted output function (i.e. construct a sentry and catch exceptions).
</p></dd><dt><a id="manual.bugs.dr586"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#586" target="_top">586</a>:
- <span class="emphasis"><em>string inserter not a formatted function</em></span>
+ <span class="bold"><strong>string inserter not a formatted function</strong></span>
</span></dt><dd><p>Change it to be a formatted output function (i.e. catch exceptions).
</p></dd><dt><a id="manual.bugs.dr596"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#596" target="_top">596</a>:
- <span class="emphasis"><em>27.8.1.3 Table 112 omits "a+" and "a+b" modes</em></span>
+ <span class="bold"><strong>27.8.1.3 Table 112 omits "a+" and "a+b" modes</strong></span>
</span></dt><dd><p>Add the missing modes to fopen_mode.
</p></dd><dt><a id="manual.bugs.dr630"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#630" target="_top">630</a>:
- <span class="emphasis"><em>arrays of valarray</em></span>
+ <span class="bold"><strong>arrays of valarray</strong></span>
</span></dt><dd><p>Implement the simple resolution.
</p></dd><dt><a id="manual.bugs.dr660"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#660" target="_top">660</a>:
- <span class="emphasis"><em>Missing bitwise operations</em></span>
+ <span class="bold"><strong>Missing bitwise operations</strong></span>
</span></dt><dd><p>Add the missing operations.
</p></dd><dt><a id="manual.bugs.dr691"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#691" target="_top">691</a>:
- <span class="emphasis"><em>const_local_iterator cbegin, cend missing from TR1</em></span>
+ <span class="bold"><strong>const_local_iterator cbegin, cend missing from TR1</strong></span>
</span></dt><dd><p>In C++11 mode add cbegin(size_type) and cend(size_type)
to the unordered containers.
</p></dd><dt><a id="manual.bugs.dr693"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#693" target="_top">693</a>:
- <span class="emphasis"><em>std::bitset::all() missing</em></span>
+ <span class="bold"><strong>std::bitset::all() missing</strong></span>
</span></dt><dd><p>Add it, consistently with the discussion.
</p></dd><dt><a id="manual.bugs.dr695"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#695" target="_top">695</a>:
- <span class="emphasis"><em>ctype&lt;char&gt;::classic_table() not accessible</em></span>
+ <span class="bold"><strong>ctype&lt;char&gt;::classic_table() not accessible</strong></span>
</span></dt><dd><p>Make the member functions table and classic_table public.
</p></dd><dt><a id="manual.bugs.dr696"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#696" target="_top">696</a>:
- <span class="emphasis"><em>istream::operator&gt;&gt;(int&amp;) broken</em></span>
+ <span class="bold"><strong>istream::operator&gt;&gt;(int&amp;) broken</strong></span>
</span></dt><dd><p>Implement the straightforward resolution.
</p></dd><dt><a id="manual.bugs.dr761"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#761" target="_top">761</a>:
- <span class="emphasis"><em>unordered_map needs an at() member function</em></span>
+ <span class="bold"><strong>unordered_map needs an at() member function</strong></span>
</span></dt><dd><p>In C++11 mode, add at() and at() const.
</p></dd><dt><a id="manual.bugs.dr775"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#775" target="_top">775</a>:
- <span class="emphasis"><em>Tuple indexing should be unsigned?</em></span>
+ <span class="bold"><strong>Tuple indexing should be unsigned?</strong></span>
</span></dt><dd><p>Implement the int -&gt; size_t replacements.
</p></dd><dt><a id="manual.bugs.dr776"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#776" target="_top">776</a>:
- <span class="emphasis"><em>Undescribed assign function of std::array</em></span>
+ <span class="bold"><strong>Undescribed assign function of std::array</strong></span>
</span></dt><dd><p>In C++11 mode, remove assign, add fill.
</p></dd><dt><a id="manual.bugs.dr781"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#781" target="_top">781</a>:
- <span class="emphasis"><em>std::complex should add missing C99 functions</em></span>
+ <span class="bold"><strong>std::complex should add missing C99 functions</strong></span>
</span></dt><dd><p>In C++11 mode, add std::proj.
</p></dd><dt><a id="manual.bugs.dr809"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#809" target="_top">809</a>:
- <span class="emphasis"><em>std::swap should be overloaded for array types</em></span>
+ <span class="bold"><strong>std::swap should be overloaded for array types</strong></span>
</span></dt><dd><p>Add the overload.
</p></dd><dt><a id="manual.bugs.dr853"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#853" target="_top">853</a>:
- <span class="emphasis"><em>to_string needs updating with zero and one</em></span>
+ <span class="bold"><strong>to_string needs updating with zero and one</strong></span>
</span></dt><dd><p>Update / add the signatures.
</p></dd><dt><a id="manual.bugs.dr865"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#865" target="_top">865</a>:
- <span class="emphasis"><em>More algorithms that throw away information</em></span>
+ <span class="bold"><strong>More algorithms that throw away information</strong></span>
</span></dt><dd><p>The traditional HP / SGI return type and value is blessed
by the resolution of the DR.
</p></dd><dt><a id="manual.bugs.dr1203"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#1203" target="_top">1203</a>:
- <span class="emphasis"><em>More useful rvalue stream insertion</em></span>
+ <span class="bold"><strong>More useful rvalue stream insertion</strong></span>
</span></dt><dd><p>Return the stream as its original type, not the base class.
</p></dd><dt><a id="manual.bugs.dr1339"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#1339" target="_top">1339</a>:
- <span class="emphasis"><em>uninitialized_fill_n should return the end of its range</em></span>
+ <span class="bold"><strong>uninitialized_fill_n should return the end of its range</strong></span>
</span></dt><dd><p>Return the end of the filled range.
</p></dd><dt><a id="manual.bugs.dr2021"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2021" target="_top">2021</a>:
- <span class="emphasis"><em>Further incorrect uses of <code class="code">result_of</code></em></span>
+ <span class="bold"><strong>Further incorrect uses of <code class="code">result_of</code></strong></span>
</span></dt><dd><p>Correctly decay types in signature of <code class="code">std::async</code>.
</p></dd><dt><a id="manual.bugs.dr2049"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2049" target="_top">2049</a>:
- <span class="emphasis"><em><code class="code">is_destructible</code> underspecified</em></span>
+ <span class="bold"><strong><code class="code">is_destructible</code> underspecified</strong></span>
</span></dt><dd><p>Handle non-object types.
</p></dd><dt><a id="manual.bugs.dr2056"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2056" target="_top">2056</a>:
- <span class="emphasis"><em>future_errc enums start with value 0 (invalid value for broken_promise)</em></span>
+ <span class="bold"><strong>future_errc enums start with value 0 (invalid value for broken_promise)</strong></span>
</span></dt><dd><p>Reorder enumerators.
</p></dd><dt><a id="manual.bugs.dr2059"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2059" target="_top">2059</a>:
- <span class="emphasis"><em>C++0x ambiguity problem with map::erase</em></span>
+ <span class="bold"><strong>C++0x ambiguity problem with map::erase</strong></span>
</span></dt><dd><p>Add additional overloads.
</p></dd><dt><a id="manual.bugs.dr2062"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2062" target="_top">2062</a>:
- <span class="emphasis"><em>2062. Effect contradictions w/o no-throw guarantee of <code class="code">std::function</code> swaps</em></span>
+ <span class="bold"><strong>2062. Effect contradictions w/o no-throw guarantee of <code class="code">std::function</code> swaps</strong></span>
</span></dt><dd><p>Add <code class="code">noexcept</code> to swap functions.
</p></dd><dt><a id="manual.bugs.dr2063"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2063" target="_top">2063</a>:
- <span class="emphasis"><em>Contradictory requirements for string move assignment</em></span>
+ <span class="bold"><strong>Contradictory requirements for string move assignment</strong></span>
</span></dt><dd><p>Respect propagation trait for move assignment.
</p></dd><dt><a id="manual.bugs.dr2064"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2064" target="_top">2064</a>:
- <span class="emphasis"><em>More noexcept issues in basic_string</em></span>
+ <span class="bold"><strong>More noexcept issues in basic_string</strong></span>
</span></dt><dd><p>Add noexcept to the comparison operators.
</p></dd><dt><a id="manual.bugs.dr2067"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2067" target="_top">2067</a>:
- <span class="emphasis"><em>packaged_task should have deleted copy c'tor with const parameter</em></span>
+ <span class="bold"><strong>packaged_task should have deleted copy c'tor with const parameter</strong></span>
</span></dt><dd><p>Fix signatures.
</p></dd><dt><a id="manual.bugs.dr2101"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2101" target="_top">2101</a>:
- <span class="emphasis"><em>Some transformation types can produce impossible types</em></span>
+ <span class="bold"><strong>Some transformation types can produce impossible types</strong></span>
</span></dt><dd><p>Use the referenceable type concept.
</p></dd><dt><a id="manual.bugs.dr2106"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2106" target="_top">2106</a>:
- <span class="emphasis"><em>move_iterator wrapping iterators returning prvalues</em></span>
+ <span class="bold"><strong>move_iterator wrapping iterators returning prvalues</strong></span>
</span></dt><dd><p>Change the <code class="code">reference</code> type.
</p></dd><dt><a id="manual.bugs.dr2108"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2108" target="_top">2108</a>:
- <span class="emphasis"><em>No way to identify allocator types that always compare equal</em></span>
+ <span class="bold"><strong>No way to identify allocator types that always compare equal</strong></span>
</span></dt><dd><p>Define and use <code class="code">is_always_equal</code> even for C++11.
</p></dd><dt><a id="manual.bugs.dr2118"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2118" target="_top">2118</a>:
- <span class="emphasis"><em><code class="code">unique_ptr</code> for array does not support cv qualification conversion of actual argument</em></span>
+ <span class="bold"><strong><code class="code">unique_ptr</code> for array does not support cv qualification conversion of actual argument</strong></span>
</span></dt><dd><p>Adjust constraints to allow safe conversions.
</p></dd><dt><a id="manual.bugs.dr2127"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2127" target="_top">2127</a>:
- <span class="emphasis"><em>Move-construction with <code class="code">raw_storage_iterator</code></em></span>
+ <span class="bold"><strong>Move-construction with <code class="code">raw_storage_iterator</code></strong></span>
</span></dt><dd><p>Add assignment operator taking an rvalue.
</p></dd><dt><a id="manual.bugs.dr2132"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2132" target="_top">2132</a>:
- <span class="emphasis"><em><code class="code">std::function</code> ambiguity</em></span>
+ <span class="bold"><strong><code class="code">std::function</code> ambiguity</strong></span>
</span></dt><dd><p>Constrain the constructor to only accept callable types.
</p></dd><dt><a id="manual.bugs.dr2141"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2141" target="_top">2141</a>:
- <span class="emphasis"><em><code class="code">common_type</code> trait produces reference types</em></span>
+ <span class="bold"><strong><code class="code">common_type</code> trait produces reference types</strong></span>
</span></dt><dd><p>Use <code class="code">decay</code> for the result type.
</p></dd><dt><a id="manual.bugs.dr2144"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2144" target="_top">2144</a>:
- <span class="emphasis"><em>Missing <code class="code">noexcept</code> specification in <code class="code">type_index</code></em></span>
+ <span class="bold"><strong>Missing <code class="code">noexcept</code> specification in <code class="code">type_index</code></strong></span>
</span></dt><dd><p>Add <code class="code">noexcept</code>
</p></dd><dt><a id="manual.bugs.dr2145"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2145" target="_top">2145</a>:
- <span class="emphasis"><em><code class="code">error_category</code> default constructor</em></span>
+ <span class="bold"><strong><code class="code">error_category</code> default constructor</strong></span>
</span></dt><dd><p>Declare a public constexpr constructor.
</p></dd><dt><a id="manual.bugs.dr2162"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2162" target="_top">2162</a>:
- <span class="emphasis"><em><code class="code">allocator_traits::max_size</code> missing <code class="code">noexcept</code></em></span>
+ <span class="bold"><strong><code class="code">allocator_traits::max_size</code> missing <code class="code">noexcept</code></strong></span>
</span></dt><dd><p>Add <code class="code">noexcept</code>.
</p></dd><dt><a id="manual.bugs.dr2187"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2187" target="_top">2187</a>:
- <span class="emphasis"><em><code class="code">vector&lt;bool&gt;</code> is missing <code class="code">emplace</code> and <code class="code">emplace_back</code> member functions</em></span>
+ <span class="bold"><strong><code class="code">vector&lt;bool&gt;</code> is missing <code class="code">emplace</code> and <code class="code">emplace_back</code> member functions</strong></span>
</span></dt><dd><p>Add <code class="code">emplace</code> and <code class="code">emplace_back</code> member functions.
</p></dd><dt><a id="manual.bugs.dr2192"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2192" target="_top">2192</a>:
- <span class="emphasis"><em>Validity and return type of <code class="code">std::abs(0u)</code> is unclear</em></span>
+ <span class="bold"><strong>Validity and return type of <code class="code">std::abs(0u)</code> is unclear</strong></span>
</span></dt><dd><p>Move all declarations to a common header and remove the
generic <code class="code">abs</code> which accepted unsigned arguments.
</p></dd><dt><a id="manual.bugs.dr2196"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2196" target="_top">2196</a>:
- <span class="emphasis"><em>Specification of <code class="code">is_*[copy/move]_[constructible/assignable]</code> unclear for non-referencable types</em></span>
+ <span class="bold"><strong>Specification of <code class="code">is_*[copy/move]_[constructible/assignable]</code> unclear for non-referencable types</strong></span>
</span></dt><dd><p>Use the referenceable type concept.
</p></dd><dt><a id="manual.bugs.dr2212"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2212" target="_top">2212</a>:
- <span class="emphasis"><em><code class="code">tuple_size</code> for <code class="code">const pair</code> request <code class="code">&lt;tuple&gt;</code> header</em></span>
+ <span class="bold"><strong><code class="code">tuple_size</code> for <code class="code">const pair</code> request <code class="code">&lt;tuple&gt;</code> header</strong></span>
</span></dt><dd><p>The <code class="code">tuple_size</code> and <code class="code">tuple_element</code>
partial specializations are defined in <code class="code">&lt;utility&gt;</code> which
is included by <code class="code">&lt;array&gt;</code>.
</p></dd><dt><a id="manual.bugs.dr2296"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2296" target="_top">2296</a>:
- <span class="emphasis"><em><code class="code">std::addressof</code> should be constexpr</em></span>
+ <span class="bold"><strong><code class="code">std::addressof</code> should be constexpr</strong></span>
</span></dt><dd><p>Use <code class="code">__builtin_addressof</code> and add
<code class="code">constexpr</code> to <code class="code">addressof</code> for C++17 and later.
</p></dd><dt><a id="manual.bugs.dr2306"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2306" target="_top">2306</a>:
- <span class="emphasis"><em><code class="code">match_results::reference</code> should be <code class="code">value_type&amp;</code>, not <code class="code">const value_type&amp;</code></em></span>
+ <span class="bold"><strong><code class="code">match_results::reference</code> should be <code class="code">value_type&amp;</code>, not <code class="code">const value_type&amp;</code></strong></span>
</span></dt><dd><p>Change typedef.
</p></dd><dt><a id="manual.bugs.dr2313"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2313" target="_top">2313</a>:
- <span class="emphasis"><em><code class="code">tuple_size</code> should always derive from <code class="code">integral_constant&lt;size_t, N&gt;</code></em></span>
+ <span class="bold"><strong><code class="code">tuple_size</code> should always derive from <code class="code">integral_constant&lt;size_t, N&gt;</code></strong></span>
</span></dt><dd><p>Update definitions of the partial specializations for const and volatile types.
</p></dd><dt><a id="manual.bugs.dr2328"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2328" target="_top">2328</a>:
- <span class="emphasis"><em>Rvalue stream extraction should use perfect forwarding</em></span>
+ <span class="bold"><strong>Rvalue stream extraction should use perfect forwarding</strong></span>
</span></dt><dd><p>Use perfect forwarding for right operand.
</p></dd><dt><a id="manual.bugs.dr2329"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2329" target="_top">2329</a>:
- <span class="emphasis"><em><code class="code">regex_match()/regex_search()</code> with <code class="code">match_results</code> should forbid temporary strings</em></span>
+ <span class="bold"><strong><code class="code">regex_match()/regex_search()</code> with <code class="code">match_results</code> should forbid temporary strings</strong></span>
</span></dt><dd><p>Add deleted overloads for rvalue strings.
</p></dd><dt><a id="manual.bugs.dr2332"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2332" target="_top">2332</a>:
- <span class="emphasis"><em><code class="code">regex_iterator/regex_token_iterator</code> should forbid temporary regexes</em></span>
+ <span class="bold"><strong><code class="code">regex_iterator/regex_token_iterator</code> should forbid temporary regexes</strong></span>
</span></dt><dd><p>Add deleted constructors.
</p></dd><dt><a id="manual.bugs.dr2354"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2354" target="_top">2332</a>:
- <span class="emphasis"><em>Unnecessary copying when inserting into maps with braced-init syntax</em></span>
+ <span class="bold"><strong>Unnecessary copying when inserting into maps with braced-init syntax</strong></span>
</span></dt><dd><p>Add overloads of <code class="code">insert</code> taking <code class="code">value_type&amp;&amp;</code> rvalues.
</p></dd><dt><a id="manual.bugs.dr2399"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2399" target="_top">2399</a>:
- <span class="emphasis"><em><code class="code">shared_ptr</code>'s constructor from <code class="code">unique_ptr</code> should be constrained</em></span>
+ <span class="bold"><strong><code class="code">shared_ptr</code>'s constructor from <code class="code">unique_ptr</code> should be constrained</strong></span>
</span></dt><dd><p>Constrain the constructor to require convertibility.
</p></dd><dt><a id="manual.bugs.dr2400"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2400" target="_top">2400</a>:
- <span class="emphasis"><em><code class="code">shared_ptr</code>'s <code class="code">get_deleter()</code> should use <code class="code">addressof()</code></em></span>
+ <span class="bold"><strong><code class="code">shared_ptr</code>'s <code class="code">get_deleter()</code> should use <code class="code">addressof()</code></strong></span>
</span></dt><dd><p>Use <code class="code">addressof</code>.
</p></dd><dt><a id="manual.bugs.dr2401"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2401" target="_top">2401</a>:
- <span class="emphasis"><em><code class="code">std::function</code> needs more <code class="code">noexcept</code></em></span>
+ <span class="bold"><strong><code class="code">std::function</code> needs more <code class="code">noexcept</code></strong></span>
</span></dt><dd><p>Add <code class="code">noexcept</code> to the assignment and comparisons.
</p></dd><dt><a id="manual.bugs.dr2407"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2407" target="_top">2407</a>:
- <span class="emphasis"><em><code class="code">packaged_task(allocator_arg_t, const Allocator&amp;, F&amp;&amp;)</code>
+ <span class="bold"><strong><code class="code">packaged_task(allocator_arg_t, const Allocator&amp;, F&amp;&amp;)</code>
should neither be constrained nor <code class="code">explicit</code>
- </em></span>
+ </strong></span>
</span></dt><dd><p>Remove <code class="code">explicit</code> from the constructor.
</p></dd><dt><a id="manual.bugs.dr2408"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2408" target="_top">2408</a>:
- <span class="emphasis"><em>SFINAE-friendly
+ <span class="bold"><strong>SFINAE-friendly
<code class="code">common_type</code>/<code class="code">iterator_traits</code>
is missing in C++14
- </em></span>
+ </strong></span>
</span></dt><dd><p>Make <code class="code">iterator_traits</code> empty if any of the
types is not present in the iterator.
Make <code class="code">common_type&lt;&gt;</code> empty.
</p></dd><dt><a id="manual.bugs.dr2415"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2415" target="_top">2415</a>:
- <span class="emphasis"><em>Inconsistency between <code class="code">unique_ptr</code> and <code class="code">shared_ptr</code></em></span>
+ <span class="bold"><strong>Inconsistency between <code class="code">unique_ptr</code> and <code class="code">shared_ptr</code></strong></span>
</span></dt><dd><p>Create empty an <code class="code">shared_ptr</code> from an empty
<code class="code">unique_ptr</code>.
</p></dd><dt><a id="manual.bugs.dr2418"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2418" target="_top">2418</a>:
- <span class="emphasis"><em><code class="code">apply</code> does not work with member pointers</em></span>
+ <span class="bold"><strong><code class="code">apply</code> does not work with member pointers</strong></span>
</span></dt><dd><p>Use <code class="code">mem_fn</code> for member pointers.
</p></dd><dt><a id="manual.bugs.dr2440"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2440" target="_top">2440</a>:
- <span class="emphasis"><em><code class="code">seed_seq::size()</code> should be <code class="code">noexcept</code></em></span>
+ <span class="bold"><strong><code class="code">seed_seq::size()</code> should be <code class="code">noexcept</code></strong></span>
</span></dt><dd><p>Add <code class="code">noexcept</code>.
</p></dd><dt><a id="manual.bugs.dr2441"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2441" target="_top">2441</a>:
- <span class="emphasis"><em>Exact-width atomic typedefs should be provided</em></span>
+ <span class="bold"><strong>Exact-width atomic typedefs should be provided</strong></span>
</span></dt><dd><p>Define the typedefs.
</p></dd><dt><a id="manual.bugs.dr2442"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2442" target="_top">2442</a>:
- <span class="emphasis"><em><code class="code">call_once()</code> shouldn't <code class="code">DECAY_COPY()</code></em></span>
+ <span class="bold"><strong><code class="code">call_once()</code> shouldn't <code class="code">DECAY_COPY()</code></strong></span>
</span></dt><dd><p>Remove indirection through call wrapper that made copies
of arguments and forward arguments straight to <code class="code">std::invoke</code>.
</p></dd><dt><a id="manual.bugs.dr2454"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2454" target="_top">2454</a>:
- <span class="emphasis"><em>Add <code class="code">raw_storage_iterator::base()</code> member
- </em></span>
+ <span class="bold"><strong>Add <code class="code">raw_storage_iterator::base()</code> member
+ </strong></span>
</span></dt><dd><p>Add the <code class="code">base()</code> member function.
</p></dd><dt><a id="manual.bugs.dr2455"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2455" target="_top">2455</a>:
- <span class="emphasis"><em>Allocator default construction should be allowed to throw
- </em></span>
+ <span class="bold"><strong>Allocator default construction should be allowed to throw
+ </strong></span>
</span></dt><dd><p>Make <code class="code">noexcept</code> specifications conditional.
</p></dd><dt><a id="manual.bugs.dr2458"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2458" target="_top">2458</a>:
- <span class="emphasis"><em>N3778 and new library deallocation signatures
- </em></span>
+ <span class="bold"><strong>N3778 and new library deallocation signatures
+ </strong></span>
</span></dt><dd><p>Remove unused overloads.
</p></dd><dt><a id="manual.bugs.dr2459"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2459" target="_top">2459</a>:
- <span class="emphasis"><em><code class="code">std::polar</code> should require a non-negative rho
- </em></span>
+ <span class="bold"><strong><code class="code">std::polar</code> should require a non-negative rho
+ </strong></span>
</span></dt><dd><p>Add debug mode assertion.
</p></dd><dt><a id="manual.bugs.dr2465"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2465" target="_top">2465</a>:
- <span class="emphasis"><em>SFINAE-friendly <code class="code">common_type</code> is nearly impossible
+ <span class="bold"><strong>SFINAE-friendly <code class="code">common_type</code> is nearly impossible
to specialize correctly and regresses key functionality
- </em></span>
+ </strong></span>
</span></dt><dd><p>Detect whether <code class="code">decay_t</code> changes either type
and use the decayed types if so.
</p></dd><dt><a id="manual.bugs.dr2466"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2466" target="_top">2466</a>:
- <span class="emphasis"><em><code class="code">allocator_traits::max_size()</code> default behavior is incorrect
- </em></span>
+ <span class="bold"><strong><code class="code">allocator_traits::max_size()</code> default behavior is incorrect
+ </strong></span>
</span></dt><dd><p>Divide by the object type.
</p></dd><dt><a id="manual.bugs.dr2484"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2484" target="_top">2484</a>:
- <span class="emphasis"><em><code class="code">rethrow_if_nested()</code> is doubly unimplementable
- </em></span>
+ <span class="bold"><strong><code class="code">rethrow_if_nested()</code> is doubly unimplementable
+ </strong></span>
</span></dt><dd><p>Avoid using <code class="code">dynamic_cast</code> when it would be
ill-formed.
</p></dd><dt><a id="manual.bugs.dr2487"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2487" target="_top">2487</a>:
- <span class="emphasis"><em><code class="code">bind()</code> should be <code class="code">const</code>-overloaded
- not cv-overloaded
- </em></span>
+ <span class="bold"><strong><code class="code">bind()</code> should be <code class="code">const</code>-overloaded
+ not <span class="emphasis"><em>cv</em></span>-overloaded
+ </strong></span>
</span></dt><dd><p>Deprecate volatile-qualified <code class="code">operator()</code>
for C++17, make it ill-formed for C++20.
</p></dd><dt><a id="manual.bugs.dr2499"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2499" target="_top">2499</a>:
- <span class="emphasis"><em><code class="code">operator&gt;&gt;(basic_istream&amp;, CharT*)</code> makes it hard to avoid buffer overflows
- </em></span>
+ <span class="bold"><strong><code class="code">operator&gt;&gt;(basic_istream&amp;, CharT*)</code> makes it hard to avoid buffer overflows
+ </strong></span>
</span></dt><dd><p>Replace <code class="code">operator&gt;&gt;(basic_istream&amp;, CharT*)</code>
and other overloads writing through pointers.
</p></dd><dt><a id="manual.bugs.dr2537"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2537" target="_top">2537</a>:
- <span class="emphasis"><em>Constructors for <code class="code">priority_queue</code> taking allocators
+ <span class="bold"><strong>Constructors for <code class="code">priority_queue</code> taking allocators
should call <code class="code">make_heap</code>
- </em></span>
+ </strong></span>
</span></dt><dd><p>Call <code class="code">make_heap</code>.
</p></dd><dt><a id="manual.bugs.dr2566"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2566" target="_top">2566</a>:
- <span class="emphasis"><em>Requirements on the first template parameter of container adaptors
- </em></span>
+ <span class="bold"><strong>Requirements on the first template parameter of container adaptors
+ </strong></span>
</span></dt><dd><p>Add static assertions to enforce the requirement.
</p></dd><dt><a id="manual.bugs.dr2583"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2583" target="_top">2583</a>:
- <span class="emphasis"><em>There is no way to supply an allocator for <code class="code">basic_string(str, pos)</code>
- </em></span>
+ <span class="bold"><strong>There is no way to supply an allocator for <code class="code">basic_string(str, pos)</code>
+ </strong></span>
</span></dt><dd><p>Add new constructor.
</p></dd><dt><a id="manual.bugs.dr2586"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2586" target="_top">2586</a>:
- <span class="emphasis"><em>Wrong value category used in <code class="code">scoped_allocator_adaptor::construct()</code>
- </em></span>
+ <span class="bold"><strong>Wrong value category used in <code class="code">scoped_allocator_adaptor::construct()</code>
+ </strong></span>
</span></dt><dd><p>Change internal helper for uses-allocator construction
to always check using const lvalue allocators.
</p></dd><dt><a id="manual.bugs.dr2684"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2684" target="_top">2684</a>:
- <span class="emphasis"><em><code class="code">priority_queue</code> lacking comparator typedef
- </em></span>
+ <span class="bold"><strong><code class="code">priority_queue</code> lacking comparator typedef
+ </strong></span>
</span></dt><dd><p>Define the <code class="code">value_compare</code> typedef.
</p></dd><dt><a id="manual.bugs.dr2735"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2735" target="_top">2735</a>:
- <span class="emphasis"><em><code class="code">std::abs(short)</code>,
+ <span class="bold"><strong><code class="code">std::abs(short)</code>,
<code class="code">std::abs(signed char)</code> and others should return
<code class="code">int</code> instead of <code class="code">double</code> in order to be
compatible with C++98 and C
- </em></span>
+ </strong></span>
</span></dt><dd><p>Resolved by the changes for
<a class="link" href="bugs.html#manual.bugs.dr2192">2192</a>.
</p></dd><dt><a id="manual.bugs.dr2770"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2770" target="_top">2770</a>:
- <span class="emphasis"><em><code class="code">tuple_size&lt;const T&gt;</code> specialization is not
+ <span class="bold"><strong><code class="code">tuple_size&lt;const T&gt;</code> specialization is not
SFINAE compatible and breaks decomposition declarations
- </em></span>
+ </strong></span>
</span></dt><dd><p>Safely detect <code class="code">tuple_size&lt;T&gt;::value</code> and
only use it if valid.
</p></dd><dt><a id="manual.bugs.dr2781"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2781" target="_top">2781</a>:
- <span class="emphasis"><em>Contradictory requirements for <code class="code">std::function</code>
+ <span class="bold"><strong>Contradictory requirements for <code class="code">std::function</code>
and <code class="code">std::reference_wrapper</code>
- </em></span>
+ </strong></span>
</span></dt><dd><p>Remove special handling for <code class="code">reference_wrapper</code>
arguments and store them directly as the target object.
</p></dd><dt><a id="manual.bugs.dr2802"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2802" target="_top">2802</a>:
- <span class="emphasis"><em>Add noexcept to several <code class="code">shared_ptr</code> related
+ <span class="bold"><strong>Add noexcept to several <code class="code">shared_ptr</code> related
functions
- </em></span>
+ </strong></span>
</span></dt><dd><p>Add noexcept.
</p></dd><dt><a id="manual.bugs.dr2873"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2873" target="_top">2873</a>:
- <span class="emphasis"><em><code class="code">shared_ptr</code> constructor requirements for a deleter
- </em></span>
+ <span class="bold"><strong><code class="code">shared_ptr</code> constructor requirements for a deleter
+ </strong></span>
</span></dt><dd><p>Use rvalues for deleters.
</p></dd><dt><a id="manual.bugs.dr2921"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2921" target="_top">2921</a>:
- <span class="emphasis"><em><code class="code">packaged_task</code> and type-erased allocators
- </em></span>
+ <span class="bold"><strong><code class="code">packaged_task</code> and type-erased allocators
+ </strong></span>
</span></dt><dd><p>For C++17 mode, remove the constructors taking
an allocator argument.
</p></dd><dt><a id="manual.bugs.dr2942"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2942" target="_top">2942</a>:
- <span class="emphasis"><em>LWG 2873's resolution missed
+ <span class="bold"><strong>LWG 2873's resolution missed
<code class="code">weak_ptr::owner_before</code>
- </em></span>
+ </strong></span>
</span></dt><dd><p>Add noexcept.
</p></dd><dt><a id="manual.bugs.dr2996"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2996" target="_top">2996</a>:
- <span class="emphasis"><em>Missing rvalue overloads for
+ <span class="bold"><strong>Missing rvalue overloads for
<code class="code">shared_ptr</code> operations
- </em></span>
+ </strong></span>
</span></dt><dd><p>Add additional constructor and cast overloads.
</p></dd><dt><a id="manual.bugs.dr2993"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2993" target="_top">2993</a>:
- <span class="emphasis"><em><code class="code">reference_wrapper&lt;T&gt;</code> conversion from <code class="code">T&amp;&amp;</code>
- </em></span>
+ <span class="bold"><strong><code class="code">reference_wrapper&lt;T&gt;</code> conversion from <code class="code">T&amp;&amp;</code>
+ </strong></span>
</span></dt><dd><p>Replaced the constructors with a constrained template,
to prevent participation in overload resolution when not valid.
</p></dd><dt><a id="manual.bugs.dr3074"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#3074" target="_top">3074</a>:
- <span class="emphasis"><em>Non-member functions for <code class="code">valarray</code> should only deduce from the <code class="code">valarray</code>
- </em></span>
+ <span class="bold"><strong>Non-member functions for <code class="code">valarray</code> should only deduce from the <code class="code">valarray</code>
+ </strong></span>
</span></dt><dd><p>Change scalar operands to be non-deduced context, so that
they will allow conversions from other types to the value_type.
</p></dd><dt><a id="manual.bugs.dr3076"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#3076" target="_top">3076</a>:
- <span class="emphasis"><em><code class="code">basic_string</code> CTAD ambiguity
- </em></span>
+ <span class="bold"><strong><code class="code">basic_string</code> CTAD ambiguity
+ </strong></span>
</span></dt><dd><p>Change constructors to constrained templates.
</p></dd><dt><a id="manual.bugs.dr3096"></a><span class="term"><a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#3096" target="_top">3096</a>:
- <span class="emphasis"><em><code class="code">path::lexically_relative</code> is confused by trailing slashes
- </em></span>
+ <span class="bold"><strong><code class="code">path::lexically_relative</code> is confused by trailing slashes
+ </strong></span>
</span></dt><dd><p>Implement the fix for trailing slashes.
</p></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">License </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Setup</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/libstdc++-v3/doc/xml/manual/intro.xml b/libstdc++-v3/doc/xml/manual/intro.xml
index e3a03cf..dee01c8 100644
--- a/libstdc++-v3/doc/xml/manual/intro.xml
+++ b/libstdc++-v3/doc/xml/manual/intro.xml
@@ -241,56 +241,56 @@ requirements of the license of GCC.
<variablelist>
<varlistentry xml:id="manual.bugs.dr5"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#5">5</link>:
- <emphasis>string::compare specification questionable</emphasis>
+ <emphasis role="bold">string::compare specification questionable</emphasis>
</term>
<listitem><para>This should be two overloaded functions rather than a single function.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr17"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#17">17</link>:
- <emphasis>Bad bool parsing</emphasis>
+ <emphasis role="bold">Bad bool parsing</emphasis>
</term>
<listitem><para>Apparently extracting Boolean values was messed up...
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr19"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#19">19</link>:
- <emphasis>"Noconv" definition too vague</emphasis>
+ <emphasis role="bold">"Noconv" definition too vague</emphasis>
</term>
<listitem><para>If <code>codecvt::do_in</code> returns <code>noconv</code> there are
no changes to the values in <code>[to, to_limit)</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr22"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#22">22</link>:
- <emphasis>Member open vs flags</emphasis>
+ <emphasis role="bold">Member open vs flags</emphasis>
</term>
<listitem><para>Re-opening a file stream does <emphasis>not</emphasis> clear the state flags.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr23"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#23">23</link>:
- <emphasis>Num_get overflow result</emphasis>
+ <emphasis role="bold">Num_get overflow result</emphasis>
</term>
<listitem><para>Implement the proposed resolution.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr25"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#25">25</link>:
- <emphasis>String operator&lt;&lt; uses width() value wrong</emphasis>
+ <emphasis role="bold">String operator&lt;&lt; uses width() value wrong</emphasis>
</term>
<listitem><para>Padding issues.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr48"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#48">48</link>:
- <emphasis>Use of non-existent exception constructor</emphasis>
+ <emphasis role="bold">Use of non-existent exception constructor</emphasis>
</term>
<listitem><para>An instance of <code>ios_base::failure</code> is constructed instead.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr49"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#49">49</link>:
- <emphasis>Underspecification of ios_base::sync_with_stdio</emphasis>
+ <emphasis role="bold">Underspecification of ios_base::sync_with_stdio</emphasis>
</term>
<listitem><para>The return type is the <emphasis>previous</emphasis> state of synchronization.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr50"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#50">50</link>:
- <emphasis>Copy constructor and assignment operator of ios_base</emphasis>
+ <emphasis role="bold">Copy constructor and assignment operator of ios_base</emphasis>
</term>
<listitem><para>These members functions are declared <code>private</code> and are
thus inaccessible. Specifying the correct semantics of
@@ -298,55 +298,55 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr60"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#60">60</link>:
- <emphasis>What is a formatted input function?</emphasis>
+ <emphasis role="bold">What is a formatted input function?</emphasis>
</term>
<listitem><para>This DR made many widespread changes to <code>basic_istream</code>
and <code>basic_ostream</code> all of which have been implemented.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr63"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#63">63</link>:
- <emphasis>Exception-handling policy for unformatted output</emphasis>
+ <emphasis role="bold">Exception-handling policy for unformatted output</emphasis>
</term>
<listitem><para>Make the policy consistent with that of formatted input, unformatted
input, and formatted output.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr68"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#68">68</link>:
- <emphasis>Extractors for char* should store null at end</emphasis>
+ <emphasis role="bold">Extractors for char* should store null at end</emphasis>
</term>
<listitem><para>And they do now. An editing glitch in the last item in the list of
[27.6.1.2.3]/7.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr74"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#74">74</link>:
- <emphasis>Garbled text for codecvt::do_max_length</emphasis>
+ <emphasis role="bold">Garbled text for codecvt::do_max_length</emphasis>
</term>
<listitem><para>The text of the standard was gibberish. Typos gone rampant.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr75"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#75">75</link>:
- <emphasis>Contradiction in codecvt::length's argument types</emphasis>
+ <emphasis role="bold">Contradiction in codecvt::length's argument types</emphasis>
</term>
<listitem><para>Change the first parameter to <code>stateT&amp;</code> and implement
the new effects paragraph.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr83"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#83">83</link>:
- <emphasis>string::npos vs. string::max_size()</emphasis>
+ <emphasis role="bold">string::npos vs. string::max_size()</emphasis>
</term>
<listitem><para>Safety checks on the size of the string should test against
<code>max_size()</code> rather than <code>npos</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr90"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#90">90</link>:
- <emphasis>Incorrect description of operator&gt;&gt; for strings</emphasis>
+ <emphasis role="bold">Incorrect description of operator&gt;&gt; for strings</emphasis>
</term>
<listitem><para>The effect contain <code>isspace(c,getloc())</code> which must be
replaced by <code>isspace(c,is.getloc())</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr91"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#91">91</link>:
- <emphasis>Description of operator&gt;&gt; and getline() for string&lt;&gt;
+ <emphasis role="bold">Description of operator&gt;&gt; and getline() for string&lt;&gt;
might cause endless loop</emphasis>
</term>
<listitem><para>They behave as a formatted input function and as an unformatted
@@ -355,7 +355,7 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr103"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#103">103</link>:
- <emphasis>set::iterator is required to be modifiable, but this allows
+ <emphasis role="bold">set::iterator is required to be modifiable, but this allows
modification of keys.</emphasis>
</term>
<listitem><para>For associative containers where the value type is the same as
@@ -364,14 +364,14 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr109"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#109">109</link>:
- <emphasis>Missing binders for non-const sequence elements</emphasis>
+ <emphasis role="bold">Missing binders for non-const sequence elements</emphasis>
</term>
<listitem><para>The <code>binder1st</code> and <code>binder2nd</code> didn't have an
<code>operator()</code> taking a non-const parameter.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr110"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#110">110</link>:
- <emphasis>istreambuf_iterator::equal not const</emphasis>
+ <emphasis role="bold">istreambuf_iterator::equal not const</emphasis>
</term>
<listitem><para>This was not a const member function. Note that the DR says to
replace the function with a const one; we have instead provided an
@@ -379,80 +379,73 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr117"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#117">117</link>:
- <emphasis>basic_ostream uses nonexistent num_put member functions</emphasis>
+ <emphasis role="bold">basic_ostream uses nonexistent num_put member functions</emphasis>
</term>
<listitem><para><code>num_put::put()</code> was overloaded on the wrong types.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr118"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#118">118</link>:
- <emphasis>basic_istream uses nonexistent num_get member functions</emphasis>
+ <emphasis role="bold">basic_istream uses nonexistent num_get member functions</emphasis>
</term>
<listitem><para>Same as 117, but for <code>num_get::get()</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr129"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#129">129</link>:
- <emphasis>Need error indication from seekp() and seekg()</emphasis>
+ <emphasis role="bold">Need error indication from seekp() and seekg()</emphasis>
</term>
<listitem><para>These functions set <code>failbit</code> on error now.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr130"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#130">130</link>:
- <emphasis>Return type of container::erase(iterator) differs for associative containers</emphasis>
+ <emphasis role="bold">Return type of container::erase(iterator) differs for associative containers</emphasis>
</term>
<listitem><para>Make member <code>erase</code> return iterator for <code>set</code>, <code>multiset</code>, <code>map</code>, <code>multimap</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr136"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#136">136</link>:
- <emphasis>seekp, seekg setting wrong streams?</emphasis>
+ <emphasis role="bold">seekp, seekg setting wrong streams?</emphasis>
</term>
<listitem><para><code>seekp</code> should only set the output stream, and
<code>seekg</code> should only set the input stream.
</para></listitem></varlistentry>
-<!--<varlistentry><term><ulink url="&DR;#159">159</ulink>:
- <emphasis>Strange use of underflow()</emphasis>
- </term>
- <listitem><para>In fstream.tcc, the basic_filebuf&lt;&gt;::showmanyc() function
- should probably not be calling <code>underflow()</code>.
- </para></listitem></varlistentry> -->
-
<varlistentry xml:id="manual.bugs.dr167"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#167">167</link>:
- <emphasis>Improper use of traits_type::length()</emphasis>
+ <emphasis role="bold">Improper use of traits_type::length()</emphasis>
</term>
<listitem><para><code>op&lt;&lt;</code> with a <code>const char*</code> was
calculating an incorrect number of characters to write.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr169"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#169">169</link>:
- <emphasis>Bad efficiency of overflow() mandated</emphasis>
+ <emphasis role="bold">Bad efficiency of overflow() mandated</emphasis>
</term>
<listitem><para>Grow efficiently the internal array object.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr171"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#171">171</link>:
- <emphasis>Strange seekpos() semantics due to joint position</emphasis>
+ <emphasis role="bold">Strange seekpos() semantics due to joint position</emphasis>
</term>
<listitem><para>Quite complex to summarize...
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr181"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#181">181</link>:
- <emphasis>make_pair() unintended behavior</emphasis>
+ <emphasis role="bold">make_pair() unintended behavior</emphasis>
</term>
<listitem><para>This function used to take its arguments as reference-to-const, now
it copies them (pass by value).
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr195"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#195">195</link>:
- <emphasis>Should basic_istream::sentry's constructor ever set eofbit?</emphasis>
+ <emphasis role="bold">Should basic_istream::sentry's constructor ever set eofbit?</emphasis>
</term>
<listitem><para>Yes, it can, specifically if EOF is reached while skipping whitespace.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr206"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#206">206</link>:
- <emphasis><code>operator new(size_t, nothrow)</code> may become
- unlinked to ordinary <code>operator new</code> if ordinary
- version replaced
- </emphasis>
+ <emphasis role="bold"><code>operator new(size_t, nothrow)</code> may become
+ unlinked to ordinary <code>operator new</code> if ordinary
+ version replaced
+ </emphasis>
</term>
<listitem><para>The <code>nothrow</code> forms of new and delete were
changed to call the throwing forms, handling any exception by
@@ -460,14 +453,14 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr211"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#211">211</link>:
- <emphasis>operator&gt;&gt;(istream&amp;, string&amp;) doesn't set failbit</emphasis>
+ <emphasis role="bold">operator&gt;&gt;(istream&amp;, string&amp;) doesn't set failbit</emphasis>
</term>
<listitem><para>If nothing is extracted into the string, <code>op&gt;&gt;</code> now
sets <code>failbit</code> (which can cause an exception, etc., etc.).
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr214"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#214">214</link>:
- <emphasis>set::find() missing const overload</emphasis>
+ <emphasis role="bold">set::find() missing const overload</emphasis>
</term>
<listitem><para>Both <code>set</code> and <code>multiset</code> were missing
overloaded find, lower_bound, upper_bound, and equal_range functions
@@ -475,47 +468,47 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr231"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#231">231</link>:
- <emphasis>Precision in iostream?</emphasis>
+ <emphasis role="bold">Precision in iostream?</emphasis>
</term>
<listitem><para>For conversion from a floating-point type, <code>str.precision()</code>
is specified in the conversion specification.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr233"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#233">233</link>:
- <emphasis>Insertion hints in associative containers</emphasis>
+ <emphasis role="bold">Insertion hints in associative containers</emphasis>
</term>
<listitem><para>Implement N1780, first check before then check after, insert as close
to hint as possible.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr235"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#235">235</link>:
- <emphasis>No specification of default ctor for reverse_iterator</emphasis>
+ <emphasis role="bold">No specification of default ctor for reverse_iterator</emphasis>
</term>
<listitem><para>The declaration of <code>reverse_iterator</code> lists a default constructor.
However, no specification is given what this constructor should do.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr241"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#241">241</link>:
- <emphasis>Does unique_copy() require CopyConstructible and Assignable?</emphasis>
+ <emphasis role="bold">Does unique_copy() require CopyConstructible and Assignable?</emphasis>
</term>
<listitem><para>Add a helper for forward_iterator/output_iterator, fix the existing
one for input_iterator/output_iterator to not rely on Assignability.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr243"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#243">243</link>:
- <emphasis>get and getline when sentry reports failure</emphasis>
+ <emphasis role="bold">get and getline when sentry reports failure</emphasis>
</term>
<listitem><para>Store a null character only if the character array has a non-zero size.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr251"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#251">251</link>:
- <emphasis>basic_stringbuf missing allocator_type</emphasis>
+ <emphasis role="bold">basic_stringbuf missing allocator_type</emphasis>
</term>
<listitem><para>This nested typedef was originally not specified.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr253"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#253">253</link>:
- <emphasis>valarray helper functions are almost entirely useless</emphasis>
+ <emphasis role="bold">valarray helper functions are almost entirely useless</emphasis>
</term>
<listitem><para>Make the copy constructor and copy-assignment operator declarations
public in gslice_array, indirect_array, mask_array, slice_array; provide
@@ -523,60 +516,60 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr265"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#265">265</link>:
- <emphasis>std::pair::pair() effects overly restrictive</emphasis>
+ <emphasis role="bold">std::pair::pair() effects overly restrictive</emphasis>
</term>
<listitem><para>The default ctor would build its members from copies of temporaries;
now it simply uses their respective default ctors.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr266"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#266">266</link>:
- <emphasis>bad_exception::~bad_exception() missing Effects clause</emphasis>
+ <emphasis role="bold">bad_exception::~bad_exception() missing Effects clause</emphasis>
</term>
<listitem><para>The <code>bad_</code>* classes no longer have destructors (they
are trivial), since no description of them was ever given.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr271"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#271">271</link>:
- <emphasis>basic_iostream missing typedefs</emphasis>
+ <emphasis role="bold">basic_iostream missing typedefs</emphasis>
</term>
<listitem><para>The typedefs it inherits from its base classes can't be used, since
(for example) <code>basic_iostream&lt;T&gt;::traits_type</code> is ambiguous.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr275"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#275">275</link>:
- <emphasis>Wrong type in num_get::get() overloads</emphasis>
+ <emphasis role="bold">Wrong type in num_get::get() overloads</emphasis>
</term>
<listitem><para>Similar to 118.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr280"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#280">280</link>:
- <emphasis>Comparison of reverse_iterator to const reverse_iterator</emphasis>
+ <emphasis role="bold">Comparison of reverse_iterator to const reverse_iterator</emphasis>
</term>
<listitem><para>Add global functions with two template parameters.
(NB: not added for now a templated assignment operator)
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr292"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#292">292</link>:
- <emphasis>Effects of a.copyfmt (a)</emphasis>
+ <emphasis role="bold">Effects of a.copyfmt (a)</emphasis>
</term>
<listitem><para>If <code>(this == &amp;rhs)</code> do nothing.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr300"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#300">300</link>:
- <emphasis>List::merge() specification incomplete</emphasis>
+ <emphasis role="bold">List::merge() specification incomplete</emphasis>
</term>
<listitem><para>If <code>(this == &amp;x)</code> do nothing.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr303"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#303">303</link>:
- <emphasis>Bitset input operator underspecified</emphasis>
+ <emphasis role="bold">Bitset input operator underspecified</emphasis>
</term>
<listitem><para>Basically, compare the input character to
<code>is.widen(0)</code> and <code>is.widen(1)</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr305"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#305">305</link>:
- <emphasis>Default behavior of codecvt&lt;wchar_t, char,
+ <emphasis role="bold">Default behavior of codecvt&lt;wchar_t, char,
mbstate_t&gt;::length()</emphasis>
</term>
<listitem><para>Do not specify what <code>codecvt&lt;wchar_t, char,
@@ -584,20 +577,20 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr328"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#328">328</link>:
- <emphasis>Bad sprintf format modifier in
+ <emphasis role="bold">Bad sprintf format modifier in
money_put&lt;&gt;::do_put()</emphasis>
</term>
<listitem><para>Change the format string to "%.0Lf".
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr365"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#365">365</link>:
- <emphasis>Lack of const-qualification in clause 27</emphasis>
+ <emphasis role="bold">Lack of const-qualification in clause 27</emphasis>
</term>
<listitem><para>Add const overloads of <code>is_open</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr387"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#387">387</link>:
- <emphasis>std::complex over-encapsulated</emphasis>
+ <emphasis role="bold">std::complex over-encapsulated</emphasis>
</term>
<listitem><para>Add the <code>real(T)</code> and <code>imag(T)</code>
members; in C++11 mode, also adjust the existing
@@ -606,26 +599,26 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr389"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#389">389</link>:
- <emphasis>Const overload of valarray::operator[] returns
+ <emphasis role="bold">Const overload of valarray::operator[] returns
by value</emphasis>
</term>
<listitem><para>Change it to return a <code>const T&amp;</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr396"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#396">396</link>:
- <emphasis>what are characters zero and one</emphasis>
+ <emphasis role="bold">what are characters zero and one</emphasis>
</term>
<listitem><para>Implement the proposed resolution.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr402"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#402">402</link>:
- <emphasis>Wrong new expression in [some_]allocator::construct</emphasis>
+ <emphasis role="bold">Wrong new expression in [some_]allocator::construct</emphasis>
</term>
<listitem><para>Replace "new" with "::new".
</para></listitem></varlistentry>
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-closed.html#408">408</link>:
- <emphasis>
+ <emphasis role="bold">
Is vector&lt;reverse_iterator&lt;char*&gt; &gt; forbidden?
</emphasis>
</term>
@@ -633,95 +626,95 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr409"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#409">409</link>:
- <emphasis>Closing an fstream should clear the error state</emphasis>
+ <emphasis role="bold">Closing an fstream should clear the error state</emphasis>
</term>
<listitem><para>Have <code>open</code> clear the error flags.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr415"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#415">415</link>:
- <emphasis>Behavior of std::ws</emphasis>
+ <emphasis role="bold">Behavior of std::ws</emphasis>
</term>
<listitem><para>Change it to be an unformatted input function
(i.e. construct a sentry and catch exceptions).
</para></listitem></varlistentry>
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-closed.html#431">431</link>:
- <emphasis>Swapping containers with unequal allocators</emphasis>
+ <emphasis role="bold">Swapping containers with unequal allocators</emphasis>
</term>
<listitem><para>Implement Option 3, as per N1599.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr432"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#432">432</link>:
- <emphasis>stringbuf::overflow() makes only one write position
+ <emphasis role="bold">stringbuf::overflow() makes only one write position
available</emphasis>
</term>
<listitem><para>Implement the resolution, beyond DR 169.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr434"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#434">434</link>:
- <emphasis>bitset::to_string() hard to use</emphasis>
+ <emphasis role="bold">bitset::to_string() hard to use</emphasis>
</term>
<listitem><para>Add three overloads, taking fewer template arguments.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr438"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#438">438</link>:
- <emphasis>Ambiguity in the "do the right thing" clause</emphasis>
+ <emphasis role="bold">Ambiguity in the "do the right thing" clause</emphasis>
</term>
<listitem><para>Implement the resolution, basically cast less.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr445"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#445">445</link>:
- <emphasis>iterator_traits::reference unspecified for some iterator categories</emphasis>
+ <emphasis role="bold">iterator_traits::reference unspecified for some iterator categories</emphasis>
</term>
<listitem><para>Change <code>istreambuf_iterator::reference</code> in C++11 mode.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr453"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#453">453</link>:
- <emphasis>basic_stringbuf::seekoff need not always fail for an empty stream</emphasis>
+ <emphasis role="bold">basic_stringbuf::seekoff need not always fail for an empty stream</emphasis>
</term>
<listitem><para>Don't fail if the next pointer is null and newoff is zero.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr455"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#455">455</link>:
- <emphasis>cerr::tie() and wcerr::tie() are overspecified</emphasis>
+ <emphasis role="bold">cerr::tie() and wcerr::tie() are overspecified</emphasis>
</term>
<listitem><para>Initialize cerr tied to cout and wcerr tied to wcout.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr464"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#464">464</link>:
- <emphasis>Suggestion for new member functions in standard containers</emphasis>
+ <emphasis role="bold">Suggestion for new member functions in standard containers</emphasis>
</term>
<listitem><para>Add <code>data()</code> to <code>std::vector</code> and
<code>at(const key_type&amp;)</code> to <code>std::map</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr467"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#467">467</link>:
- <emphasis>char_traits::lt(), compare(), and memcmp()</emphasis>
+ <emphasis role="bold">char_traits::lt(), compare(), and memcmp()</emphasis>
</term>
<listitem><para>Change <code>lt</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr508"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#508">508</link>:
- <emphasis>Bad parameters for ranlux64_base_01</emphasis>
+ <emphasis role="bold">Bad parameters for ranlux64_base_01</emphasis>
</term>
<listitem><para>Fix the parameters.
</para></listitem></varlistentry>
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-closed.html#512">512</link>:
- <emphasis>Seeding subtract_with_carry_01 from a single unsigned long</emphasis>
+ <emphasis role="bold">Seeding subtract_with_carry_01 from a single unsigned long</emphasis>
</term>
<listitem><para>Construct a <code>linear_congruential</code> engine and seed with it.
</para></listitem></varlistentry>
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-closed.html#526">526</link>:
- <emphasis>Is it undefined if a function in the standard changes in
+ <emphasis role="bold">Is it undefined if a function in the standard changes in
parameters?</emphasis>
</term>
<listitem><para>Use &amp;value.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr538"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#538">538</link>:
- <emphasis>241 again: Does unique_copy() require CopyConstructible
+ <emphasis role="bold">241 again: Does unique_copy() require CopyConstructible
and Assignable?</emphasis>
</term>
<listitem><para>In case of input_iterator/output_iterator rely on Assignability of
@@ -729,7 +722,7 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr539"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#539">539</link>:
- <emphasis>partial_sum and adjacent_difference should mention
+ <emphasis role="bold">partial_sum and adjacent_difference should mention
requirements</emphasis>
</term>
<listitem><para>We were almost doing the right thing, just use std::move
@@ -737,262 +730,262 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr541"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#541">541</link>:
- <emphasis>shared_ptr template assignment and void</emphasis>
+ <emphasis role="bold">shared_ptr template assignment and void</emphasis>
</term>
<listitem><para>Add an auto_ptr&lt;void&gt; specialization.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr543"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#543">543</link>:
- <emphasis>valarray slice default constructor</emphasis>
+ <emphasis role="bold">valarray slice default constructor</emphasis>
</term>
<listitem><para>Follow the straightforward proposed resolution.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr550"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#550">550</link>:
- <emphasis>What should the return type of pow(float,int) be?</emphasis>
+ <emphasis role="bold">What should the return type of pow(float,int) be?</emphasis>
</term>
<listitem><para>In C++11 mode, remove the pow(float,int), etc., signatures.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr581"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#581">581</link>:
- <emphasis><code>flush()</code> not unformatted function</emphasis>
+ <emphasis role="bold"><code>flush()</code> not unformatted function</emphasis>
</term>
<listitem><para>Change it to be a unformatted output function (i.e. construct a sentry and catch exceptions).
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr586"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#586">586</link>:
- <emphasis>string inserter not a formatted function</emphasis>
+ <emphasis role="bold">string inserter not a formatted function</emphasis>
</term>
<listitem><para>Change it to be a formatted output function (i.e. catch exceptions).
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr596"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#596">596</link>:
- <emphasis>27.8.1.3 Table 112 omits "a+" and "a+b" modes</emphasis>
+ <emphasis role="bold">27.8.1.3 Table 112 omits "a+" and "a+b" modes</emphasis>
</term>
<listitem><para>Add the missing modes to fopen_mode.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr630"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#630">630</link>:
- <emphasis>arrays of valarray</emphasis>
+ <emphasis role="bold">arrays of valarray</emphasis>
</term>
<listitem><para>Implement the simple resolution.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr660"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#660">660</link>:
- <emphasis>Missing bitwise operations</emphasis>
+ <emphasis role="bold">Missing bitwise operations</emphasis>
</term>
<listitem><para>Add the missing operations.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr691"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#691">691</link>:
- <emphasis>const_local_iterator cbegin, cend missing from TR1</emphasis>
+ <emphasis role="bold">const_local_iterator cbegin, cend missing from TR1</emphasis>
</term>
<listitem><para>In C++11 mode add cbegin(size_type) and cend(size_type)
to the unordered containers.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr693"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#693">693</link>:
- <emphasis>std::bitset::all() missing</emphasis>
+ <emphasis role="bold">std::bitset::all() missing</emphasis>
</term>
<listitem><para>Add it, consistently with the discussion.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr695"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#695">695</link>:
- <emphasis>ctype&lt;char&gt;::classic_table() not accessible</emphasis>
+ <emphasis role="bold">ctype&lt;char&gt;::classic_table() not accessible</emphasis>
</term>
<listitem><para>Make the member functions table and classic_table public.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr696"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#696">696</link>:
- <emphasis>istream::operator&gt;&gt;(int&amp;) broken</emphasis>
+ <emphasis role="bold">istream::operator&gt;&gt;(int&amp;) broken</emphasis>
</term>
<listitem><para>Implement the straightforward resolution.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr761"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#761">761</link>:
- <emphasis>unordered_map needs an at() member function</emphasis>
+ <emphasis role="bold">unordered_map needs an at() member function</emphasis>
</term>
<listitem><para>In C++11 mode, add at() and at() const.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr775"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#775">775</link>:
- <emphasis>Tuple indexing should be unsigned?</emphasis>
+ <emphasis role="bold">Tuple indexing should be unsigned?</emphasis>
</term>
<listitem><para>Implement the int -&gt; size_t replacements.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr776"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#776">776</link>:
- <emphasis>Undescribed assign function of std::array</emphasis>
+ <emphasis role="bold">Undescribed assign function of std::array</emphasis>
</term>
<listitem><para>In C++11 mode, remove assign, add fill.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr781"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#781">781</link>:
- <emphasis>std::complex should add missing C99 functions</emphasis>
+ <emphasis role="bold">std::complex should add missing C99 functions</emphasis>
</term>
<listitem><para>In C++11 mode, add std::proj.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr809"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#809">809</link>:
- <emphasis>std::swap should be overloaded for array types</emphasis>
+ <emphasis role="bold">std::swap should be overloaded for array types</emphasis>
</term>
<listitem><para>Add the overload.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr853"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#853">853</link>:
- <emphasis>to_string needs updating with zero and one</emphasis>
+ <emphasis role="bold">to_string needs updating with zero and one</emphasis>
</term>
<listitem><para>Update / add the signatures.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr865"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#865">865</link>:
- <emphasis>More algorithms that throw away information</emphasis>
+ <emphasis role="bold">More algorithms that throw away information</emphasis>
</term>
<listitem><para>The traditional HP / SGI return type and value is blessed
by the resolution of the DR.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr1203"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#1203">1203</link>:
- <emphasis>More useful rvalue stream insertion</emphasis>
+ <emphasis role="bold">More useful rvalue stream insertion</emphasis>
</term>
<listitem><para>Return the stream as its original type, not the base class.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr1339"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#1339">1339</link>:
- <emphasis>uninitialized_fill_n should return the end of its range</emphasis>
+ <emphasis role="bold">uninitialized_fill_n should return the end of its range</emphasis>
</term>
<listitem><para>Return the end of the filled range.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2021"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2021">2021</link>:
- <emphasis>Further incorrect uses of <code>result_of</code></emphasis>
+ <emphasis role="bold">Further incorrect uses of <code>result_of</code></emphasis>
</term>
<listitem><para>Correctly decay types in signature of <code>std::async</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2049"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2049">2049</link>:
- <emphasis><code>is_destructible</code> underspecified</emphasis>
+ <emphasis role="bold"><code>is_destructible</code> underspecified</emphasis>
</term>
<listitem><para>Handle non-object types.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2056"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2056">2056</link>:
- <emphasis>future_errc enums start with value 0 (invalid value for broken_promise)</emphasis>
+ <emphasis role="bold">future_errc enums start with value 0 (invalid value for broken_promise)</emphasis>
</term>
<listitem><para>Reorder enumerators.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2059"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2059">2059</link>:
- <emphasis>C++0x ambiguity problem with map::erase</emphasis>
+ <emphasis role="bold">C++0x ambiguity problem with map::erase</emphasis>
</term>
<listitem><para>Add additional overloads.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2062"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2062">2062</link>:
- <emphasis>2062. Effect contradictions w/o no-throw guarantee of <code>std::function</code> swaps</emphasis>
+ <emphasis role="bold">2062. Effect contradictions w/o no-throw guarantee of <code>std::function</code> swaps</emphasis>
</term>
<listitem><para>Add <code>noexcept</code> to swap functions.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2063"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2063">2063</link>:
- <emphasis>Contradictory requirements for string move assignment</emphasis>
+ <emphasis role="bold">Contradictory requirements for string move assignment</emphasis>
</term>
<listitem><para>Respect propagation trait for move assignment.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2064"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2064">2064</link>:
- <emphasis>More noexcept issues in basic_string</emphasis>
+ <emphasis role="bold">More noexcept issues in basic_string</emphasis>
</term>
<listitem><para>Add noexcept to the comparison operators.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2067"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2067">2067</link>:
- <emphasis>packaged_task should have deleted copy c'tor with const parameter</emphasis>
+ <emphasis role="bold">packaged_task should have deleted copy c'tor with const parameter</emphasis>
</term>
<listitem><para>Fix signatures.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2101"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2101">2101</link>:
- <emphasis>Some transformation types can produce impossible types</emphasis>
+ <emphasis role="bold">Some transformation types can produce impossible types</emphasis>
</term>
<listitem><para>Use the referenceable type concept.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2106"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2106">2106</link>:
- <emphasis>move_iterator wrapping iterators returning prvalues</emphasis>
+ <emphasis role="bold">move_iterator wrapping iterators returning prvalues</emphasis>
</term>
<listitem><para>Change the <code>reference</code> type.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2108"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2108">2108</link>:
- <emphasis>No way to identify allocator types that always compare equal</emphasis>
+ <emphasis role="bold">No way to identify allocator types that always compare equal</emphasis>
</term>
<listitem><para>Define and use <code>is_always_equal</code> even for C++11.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2118"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2118">2118</link>:
- <emphasis><code>unique_ptr</code> for array does not support cv qualification conversion of actual argument</emphasis>
+ <emphasis role="bold"><code>unique_ptr</code> for array does not support cv qualification conversion of actual argument</emphasis>
</term>
<listitem><para>Adjust constraints to allow safe conversions.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2127"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2127">2127</link>:
- <emphasis>Move-construction with <code>raw_storage_iterator</code></emphasis>
+ <emphasis role="bold">Move-construction with <code>raw_storage_iterator</code></emphasis>
</term>
<listitem><para>Add assignment operator taking an rvalue.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2132"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2132">2132</link>:
- <emphasis><code>std::function</code> ambiguity</emphasis>
+ <emphasis role="bold"><code>std::function</code> ambiguity</emphasis>
</term>
<listitem><para>Constrain the constructor to only accept callable types.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2141"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2141">2141</link>:
- <emphasis><code>common_type</code> trait produces reference types</emphasis>
+ <emphasis role="bold"><code>common_type</code> trait produces reference types</emphasis>
</term>
<listitem><para>Use <code>decay</code> for the result type.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2144"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2144">2144</link>:
- <emphasis>Missing <code>noexcept</code> specification in <code>type_index</code></emphasis>
+ <emphasis role="bold">Missing <code>noexcept</code> specification in <code>type_index</code></emphasis>
</term>
<listitem><para>Add <code>noexcept</code>
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2145"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2145">2145</link>:
- <emphasis><code>error_category</code> default constructor</emphasis>
+ <emphasis role="bold"><code>error_category</code> default constructor</emphasis>
</term>
<listitem><para>Declare a public constexpr constructor.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2162"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2162">2162</link>:
- <emphasis><code>allocator_traits::max_size</code> missing <code>noexcept</code></emphasis>
+ <emphasis role="bold"><code>allocator_traits::max_size</code> missing <code>noexcept</code></emphasis>
</term>
<listitem><para>Add <code>noexcept</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2187"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2187">2187</link>:
- <emphasis><code>vector&lt;bool&gt;</code> is missing <code>emplace</code> and <code>emplace_back</code> member functions</emphasis>
+ <emphasis role="bold"><code>vector&lt;bool&gt;</code> is missing <code>emplace</code> and <code>emplace_back</code> member functions</emphasis>
</term>
<listitem><para>Add <code>emplace</code> and <code>emplace_back</code> member functions.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2192"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2192">2192</link>:
- <emphasis>Validity and return type of <code>std::abs(0u)</code> is unclear</emphasis>
+ <emphasis role="bold">Validity and return type of <code>std::abs(0u)</code> is unclear</emphasis>
</term>
<listitem><para>Move all declarations to a common header and remove the
generic <code>abs</code> which accepted unsigned arguments.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2196"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2196">2196</link>:
- <emphasis>Specification of <code>is_*[copy/move]_[constructible/assignable]</code> unclear for non-referencable types</emphasis>
+ <emphasis role="bold">Specification of <code>is_*[copy/move]_[constructible/assignable]</code> unclear for non-referencable types</emphasis>
</term>
<listitem><para>Use the referenceable type concept.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2212"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2212">2212</link>:
- <emphasis><code>tuple_size</code> for <code>const pair</code> request <code>&lt;tuple&gt;</code> header</emphasis>
+ <emphasis role="bold"><code>tuple_size</code> for <code>const pair</code> request <code>&lt;tuple&gt;</code> header</emphasis>
</term>
<listitem><para>The <code>tuple_size</code> and <code>tuple_element</code>
partial specializations are defined in <code>&lt;utility&gt;</code> which
@@ -1000,79 +993,79 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2296"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2296">2296</link>:
- <emphasis><code>std::addressof</code> should be constexpr</emphasis>
+ <emphasis role="bold"><code>std::addressof</code> should be constexpr</emphasis>
</term>
<listitem><para>Use <code>__builtin_addressof</code> and add
<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>
+ <emphasis role="bold"><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>
+ <emphasis role="bold"><code>tuple_size</code> should always derive from <code>integral_constant&lt;size_t, N&gt;</code></emphasis>
</term>
<listitem><para>Update definitions of the partial specializations for const and volatile types.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2328"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2328">2328</link>:
- <emphasis>Rvalue stream extraction should use perfect forwarding</emphasis>
+ <emphasis role="bold">Rvalue stream extraction should use perfect forwarding</emphasis>
</term>
<listitem><para>Use perfect forwarding for right operand.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2329"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2329">2329</link>:
- <emphasis><code>regex_match()/regex_search()</code> with <code>match_results</code> should forbid temporary strings</emphasis>
+ <emphasis role="bold"><code>regex_match()/regex_search()</code> with <code>match_results</code> should forbid temporary strings</emphasis>
</term>
<listitem><para>Add deleted overloads for rvalue strings.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2332"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2332">2332</link>:
- <emphasis><code>regex_iterator/regex_token_iterator</code> should forbid temporary regexes</emphasis>
+ <emphasis role="bold"><code>regex_iterator/regex_token_iterator</code> should forbid temporary regexes</emphasis>
</term>
<listitem><para>Add deleted constructors.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2354"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2354">2332</link>:
- <emphasis>Unnecessary copying when inserting into maps with braced-init syntax</emphasis>
+ <emphasis role="bold">Unnecessary copying when inserting into maps with braced-init syntax</emphasis>
</term>
<listitem><para>Add overloads of <code>insert</code> taking <code>value_type&amp;&amp;</code> rvalues.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2399"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2399">2399</link>:
- <emphasis><code>shared_ptr</code>'s constructor from <code>unique_ptr</code> should be constrained</emphasis>
+ <emphasis role="bold"><code>shared_ptr</code>'s constructor from <code>unique_ptr</code> should be constrained</emphasis>
</term>
<listitem><para>Constrain the constructor to require convertibility.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2400"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2400">2400</link>:
- <emphasis><code>shared_ptr</code>'s <code>get_deleter()</code> should use <code>addressof()</code></emphasis>
+ <emphasis role="bold"><code>shared_ptr</code>'s <code>get_deleter()</code> should use <code>addressof()</code></emphasis>
</term>
<listitem><para>Use <code>addressof</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2401"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2401">2401</link>:
- <emphasis><code>std::function</code> needs more <code>noexcept</code></emphasis>
+ <emphasis role="bold"><code>std::function</code> needs more <code>noexcept</code></emphasis>
</term>
<listitem><para>Add <code>noexcept</code> to the assignment and comparisons.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2407"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2407">2407</link>:
- <emphasis><code>packaged_task(allocator_arg_t, const Allocator&amp;, F&amp;&amp;)</code>
+ <emphasis role="bold"><code>packaged_task(allocator_arg_t, const Allocator&amp;, F&amp;&amp;)</code>
should neither be constrained nor <code>explicit</code>
- </emphasis>
+ </emphasis>
</term>
<listitem><para>Remove <code>explicit</code> from the constructor.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2408"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2408">2408</link>:
- <emphasis>SFINAE-friendly
+ <emphasis role="bold">SFINAE-friendly
<code>common_type</code>/<code>iterator_traits</code>
is missing in C++14
- </emphasis>
+ </emphasis>
</term>
<listitem><para>Make <code>iterator_traits</code> empty if any of the
types is not present in the iterator.
@@ -1080,237 +1073,237 @@ requirements of the license of GCC.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2415"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2415">2415</link>:
- <emphasis>Inconsistency between <code>unique_ptr</code> and <code>shared_ptr</code></emphasis>
+ <emphasis role="bold">Inconsistency between <code>unique_ptr</code> and <code>shared_ptr</code></emphasis>
</term>
<listitem><para>Create empty an <code>shared_ptr</code> from an empty
<code>unique_ptr</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2418"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2418">2418</link>:
- <emphasis><code>apply</code> does not work with member pointers</emphasis>
+ <emphasis role="bold"><code>apply</code> does not work with member pointers</emphasis>
</term>
<listitem><para>Use <code>mem_fn</code> for member pointers.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2440"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2440">2440</link>:
- <emphasis><code>seed_seq::size()</code> should be <code>noexcept</code></emphasis>
+ <emphasis role="bold"><code>seed_seq::size()</code> should be <code>noexcept</code></emphasis>
</term>
<listitem><para>Add <code>noexcept</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2441"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2441">2441</link>:
- <emphasis>Exact-width atomic typedefs should be provided</emphasis>
+ <emphasis role="bold">Exact-width atomic typedefs should be provided</emphasis>
</term>
<listitem><para>Define the typedefs.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2442"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2442">2442</link>:
- <emphasis><code>call_once()</code> shouldn't <code>DECAY_COPY()</code></emphasis>
+ <emphasis role="bold"><code>call_once()</code> shouldn't <code>DECAY_COPY()</code></emphasis>
</term>
<listitem><para>Remove indirection through call wrapper that made copies
of arguments and forward arguments straight to <code>std::invoke</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2454"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2454">2454</link>:
- <emphasis>Add <code>raw_storage_iterator::base()</code> member
- </emphasis>
+ <emphasis role="bold">Add <code>raw_storage_iterator::base()</code> member
+ </emphasis>
</term>
<listitem><para>Add the <code>base()</code> member function.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2455"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2455">2455</link>:
- <emphasis>Allocator default construction should be allowed to throw
- </emphasis>
+ <emphasis role="bold">Allocator default construction should be allowed to throw
+ </emphasis>
</term>
<listitem><para>Make <code>noexcept</code> specifications conditional.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2458"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2458">2458</link>:
- <emphasis>N3778 and new library deallocation signatures
- </emphasis>
+ <emphasis role="bold">N3778 and new library deallocation signatures
+ </emphasis>
</term>
<listitem><para>Remove unused overloads.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2459"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2459">2459</link>:
- <emphasis><code>std::polar</code> should require a non-negative rho
- </emphasis>
+ <emphasis role="bold"><code>std::polar</code> should require a non-negative rho
+ </emphasis>
</term>
<listitem><para>Add debug mode assertion.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2465"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2465">2465</link>:
- <emphasis>SFINAE-friendly <code>common_type</code> is nearly impossible
+ <emphasis role="bold">SFINAE-friendly <code>common_type</code> is nearly impossible
to specialize correctly and regresses key functionality
- </emphasis>
+ </emphasis>
</term>
<listitem><para>Detect whether <code>decay_t</code> changes either type
and use the decayed types if so.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2466"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2466">2466</link>:
- <emphasis><code>allocator_traits::max_size()</code> default behavior is incorrect
- </emphasis>
+ <emphasis role="bold"><code>allocator_traits::max_size()</code> default behavior is incorrect
+ </emphasis>
</term>
<listitem><para>Divide by the object type.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2484"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2484">2484</link>:
- <emphasis><code>rethrow_if_nested()</code> is doubly unimplementable
- </emphasis>
+ <emphasis role="bold"><code>rethrow_if_nested()</code> is doubly unimplementable
+ </emphasis>
</term>
<listitem><para>Avoid using <code>dynamic_cast</code> when it would be
ill-formed.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2487"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2487">2487</link>:
- <emphasis><code>bind()</code> should be <code>const</code>-overloaded
- not cv-overloaded
- </emphasis>
+ <emphasis role="bold"><code>bind()</code> should be <code>const</code>-overloaded
+ not <emphasis>cv</emphasis>-overloaded
+ </emphasis>
</term>
<listitem><para>Deprecate volatile-qualified <code>operator()</code>
for C++17, make it ill-formed for C++20.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2499"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2499">2499</link>:
- <emphasis><code>operator>>(basic_istream&amp;, CharT*)</code> makes it hard to avoid buffer overflows
- </emphasis>
+ <emphasis role="bold"><code>operator>>(basic_istream&amp;, CharT*)</code> makes it hard to avoid buffer overflows
+ </emphasis>
</term>
<listitem><para>Replace <code>operator>>(basic_istream&amp;, CharT*)</code>
and other overloads writing through pointers.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2537"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2537">2537</link>:
- <emphasis>Constructors for <code>priority_queue</code> taking allocators
+ <emphasis role="bold">Constructors for <code>priority_queue</code> taking allocators
should call <code>make_heap</code>
- </emphasis>
+ </emphasis>
</term>
<listitem><para>Call <code>make_heap</code>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2566"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2566">2566</link>:
- <emphasis>Requirements on the first template parameter of container adaptors
- </emphasis>
+ <emphasis role="bold">Requirements on the first template parameter of container adaptors
+ </emphasis>
</term>
<listitem><para>Add static assertions to enforce the requirement.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2583"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2583">2583</link>:
- <emphasis>There is no way to supply an allocator for <code>basic_string(str, pos)</code>
- </emphasis>
+ <emphasis role="bold">There is no way to supply an allocator for <code>basic_string(str, pos)</code>
+ </emphasis>
</term>
<listitem><para>Add new constructor.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2586"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2586">2586</link>:
- <emphasis>Wrong value category used in <code>scoped_allocator_adaptor::construct()</code>
- </emphasis>
+ <emphasis role="bold">Wrong value category used in <code>scoped_allocator_adaptor::construct()</code>
+ </emphasis>
</term>
<listitem><para>Change internal helper for uses-allocator construction
to always check using const lvalue allocators.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2684"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2684">2684</link>:
- <emphasis><code>priority_queue</code> lacking comparator typedef
- </emphasis>
+ <emphasis role="bold"><code>priority_queue</code> lacking comparator typedef
+ </emphasis>
</term>
<listitem><para>Define the <code>value_compare</code> typedef.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2735"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2735">2735</link>:
- <emphasis><code>std::abs(short)</code>,
+ <emphasis role="bold"><code>std::abs(short)</code>,
<code>std::abs(signed char)</code> and others should return
<code>int</code> instead of <code>double</code> in order to be
compatible with C++98 and C
- </emphasis>
+ </emphasis>
</term>
<listitem><para>Resolved by the changes for
<link linkend="manual.bugs.dr2192">2192</link>.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2770"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2770">2770</link>:
- <emphasis><code>tuple_size&lt;const T&gt;</code> specialization is not
+ <emphasis role="bold"><code>tuple_size&lt;const T&gt;</code> specialization is not
SFINAE compatible and breaks decomposition declarations
- </emphasis>
+ </emphasis>
</term>
<listitem><para>Safely detect <code>tuple_size&lt;T&gt;::value</code> and
only use it if valid.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2781"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2781">2781</link>:
- <emphasis>Contradictory requirements for <code>std::function</code>
+ <emphasis role="bold">Contradictory requirements for <code>std::function</code>
and <code>std::reference_wrapper</code>
- </emphasis>
+ </emphasis>
</term>
<listitem><para>Remove special handling for <code>reference_wrapper</code>
arguments and store them directly as the target object.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2802"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2802">2802</link>:
- <emphasis>Add noexcept to several <code>shared_ptr</code> related
+ <emphasis role="bold">Add noexcept to several <code>shared_ptr</code> related
functions
- </emphasis>
+ </emphasis>
</term>
<listitem><para>Add noexcept.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2873"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2873">2873</link>:
- <emphasis><code>shared_ptr</code> constructor requirements for a deleter
- </emphasis>
+ <emphasis role="bold"><code>shared_ptr</code> constructor requirements for a deleter
+ </emphasis>
</term>
<listitem><para>Use rvalues for deleters.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2921"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2921">2921</link>:
- <emphasis><code>packaged_task</code> and type-erased allocators
- </emphasis>
+ <emphasis role="bold"><code>packaged_task</code> and type-erased allocators
+ </emphasis>
</term>
<listitem><para>For C++17 mode, remove the constructors taking
an allocator argument.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2942"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2942">2942</link>:
- <emphasis>LWG 2873's resolution missed
+ <emphasis role="bold">LWG 2873's resolution missed
<code>weak_ptr::owner_before</code>
- </emphasis>
+ </emphasis>
</term>
<listitem><para>Add noexcept.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2996"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2996">2996</link>:
- <emphasis>Missing rvalue overloads for
+ <emphasis role="bold">Missing rvalue overloads for
<code>shared_ptr</code> operations
- </emphasis>
+ </emphasis>
</term>
<listitem><para>Add additional constructor and cast overloads.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr2993"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#2993">2993</link>:
- <emphasis><code>reference_wrapper&lt;T&gt;</code> conversion from <code>T&amp;&amp;</code>
- </emphasis>
+ <emphasis role="bold"><code>reference_wrapper&lt;T&gt;</code> conversion from <code>T&amp;&amp;</code>
+ </emphasis>
</term>
<listitem><para>Replaced the constructors with a constrained template,
to prevent participation in overload resolution when not valid.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr3074"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#3074">3074</link>:
- <emphasis>Non-member functions for <code>valarray</code> should only deduce from the <code>valarray</code>
- </emphasis>
+ <emphasis role="bold">Non-member functions for <code>valarray</code> should only deduce from the <code>valarray</code>
+ </emphasis>
</term>
<listitem><para>Change scalar operands to be non-deduced context, so that
they will allow conversions from other types to the value_type.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr3076"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#3076">3076</link>:
- <emphasis><code>basic_string</code> CTAD ambiguity
- </emphasis>
+ <emphasis role="bold"><code>basic_string</code> CTAD ambiguity
+ </emphasis>
</term>
<listitem><para>Change constructors to constrained templates.
</para></listitem></varlistentry>
<varlistentry xml:id="manual.bugs.dr3096"><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&DR;#3096">3096</link>:
- <emphasis><code>path::lexically_relative</code> is confused by trailing slashes
- </emphasis>
+ <emphasis role="bold"><code>path::lexically_relative</code> is confused by trailing slashes
+ </emphasis>
</term>
<listitem><para>Implement the fix for trailing slashes.
</para></listitem></varlistentry>
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 26d2f6a..9d60755 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -380,13 +380,6 @@ WARN_CXXFLAGS = \
# -I/-D flags to pass when compiling.
AM_CPPFLAGS = $(GLIBCXX_INCLUDES) $(CPPFLAGS)
-# Regarding *_freestanding:
-# For including files in freestanding, create a new _freestanding variable, and
-# split *_headers across an ``if GLIBCXX_HOSTED'', then update install-headers
-# to account for the new directory/set being added.
-# If such a variable exists, simply add to either *_headers or *_freestanding,
-# as appropriate.
-
# Standard C++ includes.
std_srcdir = ${glibcxx_srcdir}/include/std
std_builddir = .
@@ -395,20 +388,25 @@ std_freestanding = \
${std_srcdir}/array \
${std_srcdir}/atomic \
${std_srcdir}/bit \
+ ${std_srcdir}/bitset \
${std_srcdir}/concepts \
${std_srcdir}/coroutine \
+ ${std_srcdir}/expected \
${std_srcdir}/functional \
${std_srcdir}/iterator \
${std_srcdir}/limits \
${std_srcdir}/memory \
${std_srcdir}/numbers \
+ ${std_srcdir}/numeric \
${std_srcdir}/optional \
${std_srcdir}/ranges \
${std_srcdir}/ratio \
+ ${std_srcdir}/scoped_allocator \
${std_srcdir}/source_location \
${std_srcdir}/span \
${std_srcdir}/tuple \
${std_srcdir}/type_traits \
+ ${std_srcdir}/typeindex \
${std_srcdir}/utility \
${std_srcdir}/variant \
${std_srcdir}/version
@@ -418,7 +416,6 @@ std_freestanding = \
@GLIBCXX_HOSTED_TRUE@ ${std_freestanding} \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/any \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/barrier \
-@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/bitset \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/charconv \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/chrono \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/codecvt \
@@ -426,7 +423,6 @@ std_freestanding = \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/condition_variable \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/deque \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/execution \
-@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/expected \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/filesystem \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/forward_list \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/fstream \
@@ -442,12 +438,10 @@ std_freestanding = \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/map \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/memory_resource \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/mutex \
-@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/numeric \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/ostream \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/queue \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/random \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/regex \
-@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/scoped_allocator \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/semaphore \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/set \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/shared_mutex \
@@ -463,7 +457,6 @@ std_freestanding = \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/string_view \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/system_error \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/thread \
-@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/typeindex \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/unordered_map \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/unordered_set \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/valarray \
@@ -478,6 +471,7 @@ bits_freestanding = \
${bits_srcdir}/alloc_traits.h \
${bits_srcdir}/atomic_base.h \
${bits_srcdir}/c++0x_warning.h \
+ ${bits_srcdir}/boost_concept_check.h \
${bits_srcdir}/concept_check.h \
${bits_srcdir}/cpp_type_traits.h \
${bits_srcdir}/enable_special_members.h \
@@ -506,6 +500,7 @@ bits_freestanding = \
${bits_srcdir}/stl_iterator.h \
${bits_srcdir}/stl_iterator_base_funcs.h \
${bits_srcdir}/stl_iterator_base_types.h \
+ ${bits_srcdir}/stl_numeric.h \
${bits_srcdir}/stl_heap.h \
${bits_srcdir}/stl_pair.h \
${bits_srcdir}/stl_raw_storage_iter.h \
@@ -528,7 +523,6 @@ bits_freestanding = \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/basic_ios.tcc \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/basic_string.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/basic_string.tcc \
-@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/boost_concept_check.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/char_traits.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/charconv.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/chrono.h \
@@ -601,7 +595,6 @@ bits_freestanding = \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/stl_map.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/stl_multimap.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/stl_multiset.h \
-@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/stl_numeric.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/stl_queue.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/stl_relops.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/stl_set.h \
@@ -974,49 +967,53 @@ pb_headers7 = \
ext_srcdir = ${glibcxx_srcdir}/include/ext
ext_builddir = ./ext
-ext_headers = \
- ${ext_srcdir}/algorithm \
+ext_freestanding = \
${ext_srcdir}/aligned_buffer.h \
${ext_srcdir}/alloc_traits.h \
${ext_srcdir}/atomicity.h \
- ${ext_srcdir}/bitmap_allocator.h \
${ext_srcdir}/cast.h \
- ${ext_srcdir}/cmath \
- ${ext_srcdir}/codecvt_specializations.h \
${ext_srcdir}/concurrence.h \
- ${ext_srcdir}/debug_allocator.h \
- ${ext_srcdir}/enc_filebuf.h \
- ${ext_srcdir}/extptr_allocator.h \
- ${ext_srcdir}/functional \
- ${ext_srcdir}/iterator \
- ${ext_srcdir}/malloc_allocator.h \
- ${ext_srcdir}/memory \
- ${ext_srcdir}/mt_allocator.h \
- ${ext_srcdir}/new_allocator.h \
- ${ext_srcdir}/numeric \
${ext_srcdir}/numeric_traits.h \
- ${ext_srcdir}/pod_char_traits.h \
+ ${ext_srcdir}/iterator \
${ext_srcdir}/pointer.h \
- ${ext_srcdir}/pool_allocator.h \
- ${ext_srcdir}/random \
- ${ext_srcdir}/random.tcc \
- ${ext_srcdir}/rb_tree \
- ${ext_srcdir}/rc_string_base.h \
- ${ext_srcdir}/rope \
- ${ext_srcdir}/ropeimpl.h \
- ${ext_srcdir}/slist \
- ${ext_srcdir}/sso_string_base.h \
- ${ext_srcdir}/stdio_filebuf.h \
- ${ext_srcdir}/stdio_sync_filebuf.h \
- ${ext_srcdir}/string_conversions.h \
- ${ext_srcdir}/throw_allocator.h \
- ${ext_srcdir}/typelist.h \
${ext_srcdir}/type_traits.h \
- ${ext_srcdir}/vstring_fwd.h \
- ${ext_srcdir}/vstring.h \
- ${ext_srcdir}/vstring.tcc \
- ${ext_srcdir}/vstring_util.h \
- ${ext_compat_headers}
+ ${ext_srcdir}/typelist.h
+
+@GLIBCXX_HOSTED_FALSE@ext_headers = ${ext_freestanding}
+@GLIBCXX_HOSTED_TRUE@ext_headers = \
+@GLIBCXX_HOSTED_TRUE@ ${ext_freestanding} \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/algorithm \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/bitmap_allocator.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/cmath \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/codecvt_specializations.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/debug_allocator.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/enc_filebuf.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/extptr_allocator.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/functional \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/malloc_allocator.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/memory \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/mt_allocator.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/new_allocator.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/numeric \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/pod_char_traits.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/pool_allocator.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/random \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/random.tcc \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/rb_tree \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/rc_string_base.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/rope \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/ropeimpl.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/slist \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/sso_string_base.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/stdio_filebuf.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/stdio_sync_filebuf.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/string_conversions.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/throw_allocator.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/vstring_fwd.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/vstring.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/vstring.tcc \
+@GLIBCXX_HOSTED_TRUE@ ${ext_srcdir}/vstring_util.h \
+@GLIBCXX_HOSTED_TRUE@ ${ext_compat_headers}
ext_compat_headers = \
${backward_srcdir}/hash_set \
@@ -1945,9 +1942,6 @@ install-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${backward_builddir}
for file in ${backward_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${backward_builddir}; done
- $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${ext_builddir}
- for file in ${ext_headers}; do \
- $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${ext_builddir}; done
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${std_builddir}
for file in ${std_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${std_builddir}; done
@@ -1962,6 +1956,9 @@ install-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${c_base_builddir}
for file in ${c_base_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${c_base_builddir}; done
+ $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${ext_builddir}
+ for file in ${ext_headers}; do \
+ $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${ext_builddir}; done
@GLIBCXX_HOSTED_TRUE@ for dir in ${pb_subdirs}; do \
@GLIBCXX_HOSTED_TRUE@ $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/$${dir} ; done
@GLIBCXX_HOSTED_TRUE@ for file in ${pb_headers1}; do \
diff --git a/libstdc++-v3/include/bits/functexcept.h b/libstdc++-v3/include/bits/functexcept.h
index a78a17b..7fad4b1 100644
--- a/libstdc++-v3/include/bits/functexcept.h
+++ b/libstdc++-v3/include/bits/functexcept.h
@@ -43,6 +43,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+#if _GLIBCXX_HOSTED
// Helper for exception objects in <except>
void
__throw_bad_exception(void) __attribute__((__noreturn__));
@@ -112,6 +113,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
__throw_bad_function_call() __attribute__((__noreturn__));
+#else // ! HOSTED
+
+ __attribute__((__noreturn__)) inline void
+ __throw_invalid_argument(const char*)
+ { std::__terminate(); }
+
+ __attribute__((__noreturn__)) inline void
+ __throw_out_of_range(const char*)
+ { std::__terminate(); }
+
+ __attribute__((__noreturn__)) inline void
+ __throw_out_of_range_fmt(const char*, ...)
+ { std::__terminate(); }
+
+ __attribute__((__noreturn__)) inline void
+ __throw_runtime_error(const char*)
+ { std::__terminate(); }
+
+ __attribute__((__noreturn__)) inline void
+ __throw_overflow_error(const char*)
+ { std::__terminate(); }
+
+#endif // HOSTED
+
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/include/bits/invoke.h b/libstdc++-v3/include/bits/invoke.h
index 8724a76..8fa8cf8 100644
--- a/libstdc++-v3/include/bits/invoke.h
+++ b/libstdc++-v3/include/bits/invoke.h
@@ -130,8 +130,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
using __result = __invoke_result<_Callable, _Args...>;
using __type = typename __result::type;
+#if __has_builtin(__reference_converts_from_temporary)
static_assert(!__reference_converts_from_temporary(_Res, __type),
"INVOKE<R> must not create a dangling reference");
+#endif
using __tag = typename __result::__invoke_type;
return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
std::forward<_Args>(__args)...);
diff --git a/libstdc++-v3/include/bits/random.h b/libstdc++-v3/include/bits/random.h
index 3e6eb9d..28b37a9 100644
--- a/libstdc++-v3/include/bits/random.h
+++ b/libstdc++-v3/include/bits/random.h
@@ -198,16 +198,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Engine& _M_g;
};
+ // Detect whether a template argument _Sseq is a valid seed sequence for
+ // a random number engine _Engine with result type _Res.
+ // Used to constrain _Engine::_Engine(_Sseq&) and _Engine::seed(_Sseq&)
+ // as required by [rand.eng.general].
+
template<typename _Sseq>
using __seed_seq_generate_t = decltype(
std::declval<_Sseq&>().generate(std::declval<uint_least32_t*>(),
std::declval<uint_least32_t*>()));
- // Detect whether _Sseq is a valid seed sequence for
- // a random number engine _Engine with result type _Res.
template<typename _Sseq, typename _Engine, typename _Res,
typename _GenerateCheck = __seed_seq_generate_t<_Sseq>>
- using __is_seed_seq = __and_<
+ using _If_seed_seq_for = _Require<
__not_<is_same<__remove_cvref_t<_Sseq>, _Engine>>,
is_unsigned<typename _Sseq::result_type>,
__not_<is_convertible<_Sseq, _Res>>
@@ -263,8 +266,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
"template argument substituting __m out of bounds");
template<typename _Sseq>
- using _If_seed_seq = typename enable_if<__detail::__is_seed_seq<
- _Sseq, linear_congruential_engine, _UIntType>::value>::type;
+ using _If_seed_seq
+ = __detail::_If_seed_seq_for<_Sseq, linear_congruential_engine,
+ _UIntType>;
public:
/** The type of the generated random value. */
@@ -502,8 +506,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
"template argument substituting __f out of bound");
template<typename _Sseq>
- using _If_seed_seq = typename enable_if<__detail::__is_seed_seq<
- _Sseq, mersenne_twister_engine, _UIntType>::value>::type;
+ using _If_seed_seq
+ = __detail::_If_seed_seq_for<_Sseq, mersenne_twister_engine,
+ _UIntType>;
public:
/** The type of the generated random value. */
@@ -702,8 +707,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
"template argument substituting __w out of bounds");
template<typename _Sseq>
- using _If_seed_seq = typename enable_if<__detail::__is_seed_seq<
- _Sseq, subtract_with_carry_engine, _UIntType>::value>::type;
+ using _If_seed_seq
+ = __detail::_If_seed_seq_for<_Sseq, subtract_with_carry_engine,
+ _UIntType>;
public:
/** The type of the generated random value. */
@@ -894,8 +900,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef typename _RandomNumberEngine::result_type result_type;
template<typename _Sseq>
- using _If_seed_seq = typename enable_if<__detail::__is_seed_seq<
- _Sseq, discard_block_engine, result_type>::value>::type;
+ using _If_seed_seq
+ = __detail::_If_seed_seq_for<_Sseq, discard_block_engine,
+ result_type>;
// parameter values
static constexpr size_t block_size = __p;
@@ -1113,8 +1120,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
"template argument substituting __w out of bounds");
template<typename _Sseq>
- using _If_seed_seq = typename enable_if<__detail::__is_seed_seq<
- _Sseq, independent_bits_engine, _UIntType>::value>::type;
+ using _If_seed_seq
+ = __detail::_If_seed_seq_for<_Sseq, independent_bits_engine,
+ _UIntType>;
public:
/** The type of the generated random value. */
@@ -1336,8 +1344,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef typename _RandomNumberEngine::result_type result_type;
template<typename _Sseq>
- using _If_seed_seq = typename enable_if<__detail::__is_seed_seq<
- _Sseq, shuffle_order_engine, result_type>::value>::type;
+ using _If_seed_seq
+ = __detail::_If_seed_seq_for<_Sseq, shuffle_order_engine,
+ result_type>;
static constexpr size_t table_size = __k;
diff --git a/libstdc++-v3/include/bits/std_function.h b/libstdc++-v3/include/bits/std_function.h
index f5423a3..8ab32a6 100644
--- a/libstdc++-v3/include/bits/std_function.h
+++ b/libstdc++-v3/include/bits/std_function.h
@@ -36,11 +36,11 @@
# include <bits/c++0x_warning.h>
#else
-#include <typeinfo>
-#include <bits/stl_function.h>
-#include <bits/invoke.h>
-#include <bits/refwrap.h>
-#include <bits/functexcept.h>
+#include <new> // placement new
+#include <typeinfo> // typeid
+#include <bits/invoke.h> // __invoke_r
+#include <bits/refwrap.h> // ref wrapper, _Maybe_unary_or_binary_function
+#include <bits/functexcept.h> // __throw_bad_function_call
namespace std _GLIBCXX_VISIBILITY(default)
{
diff --git a/libstdc++-v3/include/c_global/cstdint b/libstdc++-v3/include/c_global/cstdint
index 4490d06..4b9df45 100644
--- a/libstdc++-v3/include/c_global/cstdint
+++ b/libstdc++-v3/include/c_global/cstdint
@@ -37,7 +37,11 @@
#include <bits/c++config.h>
-#if _GLIBCXX_HAVE_STDINT_H
+#if ! _GLIBCXX_HOSTED && __has_include(<stdint-gcc.h>)
+// For --disable-hosted-libstdcxx we want GCC's own stdint-gcc.h header
+// even when -ffreestanding isn't used.
+# include <stdint-gcc.h>
+#elif __has_include(<stdint.h>)
# include <stdint.h>
#endif
@@ -80,9 +84,60 @@ namespace std
using ::uintmax_t;
using ::uintptr_t;
#else // !_GLIBCXX_USE_C99_STDINT_TR1
- // Define the minimum needed for <ratio>, <chrono> etc.
+
using intmax_t = __INTMAX_TYPE__;
using uintmax_t = __UINTMAX_TYPE__;
+
+#ifdef __INT8_TYPE__
+ using int8_t = __INT8_TYPE__;
+#endif
+#ifdef __INT16_TYPE__
+ using int16_t = __INT16_TYPE__;
+#endif
+#ifdef __INT32_TYPE__
+ using int32_t = __INT32_TYPE__;
+#endif
+#ifdef __INT64_TYPE__
+ using int64_t = __INT64_TYPE__;
+#endif
+
+ using int_least8_t = __INT_LEAST8_TYPE__;
+ using int_least16_t = __INT_LEAST16_TYPE__;
+ using int_least32_t = __INT_LEAST32_TYPE__;
+ using int_least64_t = __INT_LEAST64_TYPE__;
+ using int_fast8_t = __INT_FAST8_TYPE__;
+ using int_fast16_t = __INT_FAST16_TYPE__;
+ using int_fast32_t = __INT_FAST32_TYPE__;
+ using int_fast64_t = __INT_FAST64_TYPE__;
+
+#ifdef __INTPTR_TYPE__
+ using intptr_t = __INTPTR_TYPE__;
+#endif
+
+#ifdef __UINT8_TYPE__
+ using uint8_t = __UINT8_TYPE__;
+#endif
+#ifdef __UINT16_TYPE__
+ using uint16_t = __UINT16_TYPE__;
+#endif
+#ifdef __UINT32_TYPE__
+ using uint32_t = __UINT32_TYPE__;
+#endif
+#ifdef __UINT64_TYPE__
+ using uint64_t = __UINT64_TYPE__;
+#endif
+ using uint_least8_t = __UINT_LEAST8_TYPE__;
+ using uint_least16_t = __UINT_LEAST16_TYPE__;
+ using uint_least32_t = __UINT_LEAST32_TYPE__;
+ using uint_least64_t = __UINT_LEAST64_TYPE__;
+ using uint_fast8_t = __UINT_FAST8_TYPE__;
+ using uint_fast16_t = __UINT_FAST16_TYPE__;
+ using uint_fast32_t = __UINT_FAST32_TYPE__;
+ using uint_fast64_t = __UINT_FAST64_TYPE__;
+#ifdef __UINTPTR_TYPE__
+ using uintptr_t = __UINTPTR_TYPE__;
+#endif
+
#endif // _GLIBCXX_USE_C99_STDINT_TR1
} // namespace std
diff --git a/libstdc++-v3/include/ext/random b/libstdc++-v3/include/ext/random
index 4cc0e25..406b12b 100644
--- a/libstdc++-v3/include/ext/random
+++ b/libstdc++-v3/include/ext/random
@@ -89,9 +89,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Sseq>
using _If_seed_seq
- = typename std::enable_if<std::__detail::__is_seed_seq<
- _Sseq, simd_fast_mersenne_twister_engine, result_type>::value
- >::type;
+ = std::__detail::_If_seed_seq_for<_Sseq,
+ simd_fast_mersenne_twister_engine,
+ result_type>;
public:
static constexpr size_t state_size = _M_nstate * (16
diff --git a/libstdc++-v3/include/std/bitset b/libstdc++-v3/include/std/bitset
index afabeb4..1f3f68f 100644
--- a/libstdc++-v3/include/std/bitset
+++ b/libstdc++-v3/include/std/bitset
@@ -1514,13 +1514,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
else if (_Traits::eq(__c, __one))
_Unchecked_set(__i - 1);
else
- {
-#if _GLIBCXX_HOSTED
- __throw_invalid_argument(__N("bitset::_M_copy_from_ptr"));
-#else
- __builtin_abort();
-#endif
- }
+ __throw_invalid_argument(__N("bitset::_M_copy_from_ptr"));
}
}
diff --git a/libstdc++-v3/include/std/coroutine b/libstdc++-v3/include/std/coroutine
index f4189c7..ebaf11d 100644
--- a/libstdc++-v3/include/std/coroutine
+++ b/libstdc++-v3/include/std/coroutine
@@ -39,7 +39,7 @@
# include <compare>
#endif
-#if !defined __cpp_lib_three_way_comparison && _GLIBCXX_HOSTED
+#if !defined __cpp_lib_three_way_comparison
# include <bits/stl_function.h> // for std::less
#endif
@@ -165,11 +165,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr bool
operator<(coroutine_handle<> __a, coroutine_handle<> __b) noexcept
{
-#if _GLIBCXX_HOSTED
return less<void*>()(__a.address(), __b.address());
-#else
- return (__UINTPTR_TYPE__)__a.address() < (__UINTPTR_TYPE__)__b.address();
-#endif
}
constexpr bool
@@ -343,7 +339,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
} // namespace __n4861
-#if _GLIBCXX_HOSTED
template<typename _Tp> struct hash;
template<typename _Promise>
@@ -355,10 +350,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return reinterpret_cast<size_t>(__h.address());
}
};
-#endif
#else
-#error "the coroutine header requires -fcoroutines"
+#error "the <coroutine> header requires -fcoroutines"
#endif
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index adf9cb1..d22acaa 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -46,11 +46,10 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <bits/stl_function.h>
+#include <bits/stl_function.h> // std::equal_to, std::unary_function etc.
#if __cplusplus >= 201103L
-#include <new>
#include <tuple>
#include <type_traits>
#include <bits/functional_hash.h>
@@ -67,8 +66,8 @@
# endif
# include <bits/stl_algo.h> // std::search
#endif
-#if __cplusplus > 201703L
-# include <bits/ranges_cmp.h>
+#if __cplusplus >= 202002L
+# include <bits/ranges_cmp.h> // std::identity, ranges::equal_to etc.
# include <compare>
#endif
#if __cplusplus > 202002L && _GLIBCXX_HOSTED
diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges
index c2eacde..1f82112 100644
--- a/libstdc++-v3/include/std/ranges
+++ b/libstdc++-v3/include/std/ranges
@@ -44,6 +44,9 @@
#include <optional>
#include <span>
#include <tuple>
+#if __cplusplus > 202002L
+#include <variant>
+#endif
#include <bits/ranges_util.h>
#include <bits/refwrap.h>
@@ -6873,6 +6876,486 @@ namespace views::__adaptor
inline constexpr _ChunkBy chunk_by;
}
+
+ namespace __detail
+ {
+ template<typename _Range, typename _Pattern>
+ concept __compatible_joinable_ranges
+ = common_with<range_value_t<_Range>, range_value_t<_Pattern>>
+ && common_reference_with<range_reference_t<_Range>,
+ range_reference_t<_Pattern>>
+ && common_reference_with<range_rvalue_reference_t<_Range>,
+ range_rvalue_reference_t<_Pattern>>;
+
+ template<typename _Range>
+ concept __bidirectional_common = bidirectional_range<_Range> && common_range<_Range>;
+ }
+
+ template<input_range _Vp, forward_range _Pattern>
+ requires view<_Vp> && view<_Pattern>
+ && input_range<range_reference_t<_Vp>>
+ && __detail::__compatible_joinable_ranges<range_reference_t<_Vp>, _Pattern>
+ class join_with_view : public view_interface<join_with_view<_Vp, _Pattern>>
+ {
+ using _InnerRange = range_reference_t<_Vp>;
+
+ _Vp _M_base = _Vp();
+ __detail::__non_propagating_cache<remove_cv_t<_InnerRange>> _M_inner;
+ _Pattern _M_pattern = _Pattern();
+
+ template<bool _Const> using _Base = __detail::__maybe_const_t<_Const, _Vp>;
+ template<bool _Const> using _InnerBase = range_reference_t<_Base<_Const>>;
+ template<bool _Const> using _PatternBase = __detail::__maybe_const_t<_Const, _Pattern>;
+
+ template<bool _Const> using _OuterIter = iterator_t<_Base<_Const>>;
+ template<bool _Const> using _InnerIter = iterator_t<_InnerBase<_Const>>;
+ template<bool _Const> using _PatternIter = iterator_t<_PatternBase<_Const>>;
+
+ template<bool _Const>
+ static constexpr bool _S_ref_is_glvalue = is_reference_v<_InnerBase<_Const>>;
+
+ template<bool _Const>
+ struct __iter_cat
+ { };
+
+ template<bool _Const>
+ requires _S_ref_is_glvalue<_Const>
+ && forward_range<_Base<_Const>>
+ && forward_range<_InnerBase<_Const>>
+ struct __iter_cat<_Const>
+ {
+ private:
+ static auto
+ _S_iter_cat()
+ {
+ using _OuterIter = join_with_view::_OuterIter<_Const>;
+ using _InnerIter = join_with_view::_InnerIter<_Const>;
+ using _PatternIter = join_with_view::_PatternIter<_Const>;
+ using _OuterCat = typename iterator_traits<_OuterIter>::iterator_category;
+ using _InnerCat = typename iterator_traits<_InnerIter>::iterator_category;
+ using _PatternCat = typename iterator_traits<_PatternIter>::iterator_category;
+ if constexpr (!is_lvalue_reference_v<common_reference_t<iter_reference_t<_InnerIter>,
+ iter_reference_t<_PatternIter>>>)
+ return input_iterator_tag{};
+ else if constexpr (derived_from<_OuterCat, bidirectional_iterator_tag>
+ && derived_from<_InnerCat, bidirectional_iterator_tag>
+ && derived_from<_PatternCat, bidirectional_iterator_tag>
+ && common_range<_InnerBase<_Const>>
+ && common_range<_PatternBase<_Const>>)
+ return bidirectional_iterator_tag{};
+ else if constexpr (derived_from<_OuterCat, forward_iterator_tag>
+ && derived_from<_InnerCat, forward_iterator_tag>
+ && derived_from<_PatternCat, forward_iterator_tag>)
+ return forward_iterator_tag{};
+ else
+ return input_iterator_tag{};
+ }
+ public:
+ using iterator_category = decltype(_S_iter_cat());
+ };
+
+ template<bool> struct _Iterator;
+ template<bool> struct _Sentinel;
+
+ public:
+ join_with_view() requires (default_initializable<_Vp>
+ && default_initializable<_Pattern>)
+ = default;
+
+ constexpr
+ join_with_view(_Vp __base, _Pattern __pattern)
+ : _M_base(std::move(__base)), _M_pattern(std::move(__pattern))
+ { }
+
+ template<input_range _Range>
+ requires constructible_from<_Vp, views::all_t<_Range>>
+ && constructible_from<_Pattern, single_view<range_value_t<_InnerRange>>>
+ constexpr
+ join_with_view(_Range&& __r, range_value_t<_InnerRange> __e)
+ : _M_base(views::all(std::forward<_Range>(__r))),
+ _M_pattern(views::single(std::move(__e)))
+ { }
+
+ constexpr _Vp
+ base() const& requires copy_constructible<_Vp>
+ { return _M_base; }
+
+ constexpr _Vp
+ base() &&
+ { return std::move(_M_base); }
+
+ constexpr auto
+ begin()
+ {
+ constexpr bool __use_const = is_reference_v<_InnerRange>
+ && __detail::__simple_view<_Vp> && __detail::__simple_view<_Pattern>;
+ return _Iterator<__use_const>{*this, ranges::begin(_M_base)};
+ }
+
+ constexpr auto
+ begin() const
+ requires input_range<const _Vp>
+ && forward_range<const _Pattern>
+ && is_reference_v<range_reference_t<const _Vp>>
+ { return _Iterator<true>{*this, ranges::begin(_M_base)}; }
+
+ constexpr auto
+ end()
+ {
+ constexpr bool __use_const
+ = __detail::__simple_view<_Vp> && __detail::__simple_view<_Pattern>;
+ if constexpr (is_reference_v<_InnerRange>
+ && forward_range<_Vp> && common_range<_Vp>
+ && forward_range<_InnerRange> && common_range<_InnerRange>)
+ return _Iterator<__use_const>{*this, ranges::end(_M_base)};
+ else
+ return _Sentinel<__use_const>{*this};
+ }
+
+ constexpr auto
+ end() const
+ requires input_range<const _Vp>
+ && forward_range<const _Pattern>
+ && is_reference_v<range_reference_t<const _Vp>>
+ {
+ using _InnerConstRange = range_reference_t<const _Vp>;
+ if constexpr (forward_range<const _Vp>
+ && forward_range<_InnerConstRange>
+ && common_range<const _Vp>
+ && common_range<_InnerConstRange>)
+ return _Iterator<true>{*this, ranges::end(_M_base)};
+ else
+ return _Sentinel<true>{*this};
+ }
+ };
+
+ template<typename _Range, typename _Pattern>
+ join_with_view(_Range&&, _Pattern&&)
+ -> join_with_view<views::all_t<_Range>, views::all_t<_Pattern>>;
+
+ template<input_range _Range>
+ join_with_view(_Range&&, range_value_t<range_reference_t<_Range>>)
+ -> join_with_view<views::all_t<_Range>,
+ single_view<range_value_t<range_reference_t<_Range>>>>;
+
+ template<input_range _Vp, forward_range _Pattern>
+ requires view<_Vp> && view<_Pattern>
+ && input_range<range_reference_t<_Vp>>
+ && __detail::__compatible_joinable_ranges<range_reference_t<_Vp>, _Pattern>
+ template<bool _Const>
+ class join_with_view<_Vp, _Pattern>::_Iterator : public __iter_cat<_Const>
+ {
+ using _Parent = __detail::__maybe_const_t<_Const, join_with_view>;
+ using _Base = join_with_view::_Base<_Const>;
+ using _InnerBase = join_with_view::_InnerBase<_Const>;
+ using _PatternBase = join_with_view::_PatternBase<_Const>;
+
+ using _OuterIter = join_with_view::_OuterIter<_Const>;
+ using _InnerIter = join_with_view::_InnerIter<_Const>;
+ using _PatternIter = join_with_view::_PatternIter<_Const>;
+
+ static constexpr bool _S_ref_is_glvalue = join_with_view::_S_ref_is_glvalue<_Const>;
+
+ _Parent* _M_parent = nullptr;
+ _OuterIter _M_outer_it = _OuterIter();
+ variant<_PatternIter, _InnerIter> _M_inner_it;
+
+ constexpr
+ _Iterator(_Parent& __parent, iterator_t<_Base> __outer)
+ : _M_parent(std::__addressof(__parent)), _M_outer_it(std::move(__outer))
+ {
+ if (_M_outer_it != ranges::end(_M_parent->_M_base))
+ {
+ auto&& __inner = _M_update_inner(_M_outer_it);
+ _M_inner_it.template emplace<1>(ranges::begin(__inner));
+ _M_satisfy();
+ }
+ }
+
+ constexpr auto&&
+ _M_update_inner(const _OuterIter& __x)
+ {
+ if constexpr (_S_ref_is_glvalue)
+ return *__x;
+ else
+ return _M_parent->_M_inner._M_emplace_deref(__x);
+ }
+
+ constexpr auto&&
+ _M_get_inner(const _OuterIter& __x)
+ {
+ if constexpr (_S_ref_is_glvalue)
+ return *__x;
+ else
+ return *_M_parent->_M_inner;
+ }
+
+ constexpr void
+ _M_satisfy()
+ {
+ while (true)
+ {
+ if (_M_inner_it.index() == 0)
+ {
+ if (std::get<0>(_M_inner_it) != ranges::end(_M_parent->_M_pattern))
+ break;
+
+ auto&& __inner = _M_update_inner(_M_outer_it);
+ _M_inner_it.template emplace<1>(ranges::begin(__inner));
+ }
+ else
+ {
+ auto&& __inner = _M_get_inner(_M_outer_it);
+ if (std::get<1>(_M_inner_it) != ranges::end(__inner))
+ break;
+
+ if (++_M_outer_it == ranges::end(_M_parent->_M_base))
+ {
+ if constexpr (_S_ref_is_glvalue)
+ _M_inner_it.template emplace<0>();
+ break;
+ }
+
+ _M_inner_it.template emplace<0>(ranges::begin(_M_parent->_M_pattern));
+ }
+ }
+ }
+
+ static auto
+ _S_iter_concept()
+ {
+ if constexpr (_S_ref_is_glvalue
+ && bidirectional_range<_Base>
+ && __detail::__bidirectional_common<_InnerBase>
+ && __detail::__bidirectional_common<_PatternBase>)
+ return bidirectional_iterator_tag{};
+ else if constexpr (_S_ref_is_glvalue
+ && forward_range<_Base>
+ && forward_range<_InnerBase>)
+ return forward_iterator_tag{};
+ else
+ return input_iterator_tag{};
+ }
+
+ friend join_with_view;
+
+ public:
+ using iterator_concept = decltype(_S_iter_concept());
+ // iterator_category defined in join_with_view::__iter_cat
+ using value_type = common_type_t<iter_value_t<_InnerIter>,
+ iter_value_t<_PatternIter>>;
+ using difference_type = common_type_t<iter_difference_t<_OuterIter>,
+ iter_difference_t<_InnerIter>,
+ iter_difference_t<_PatternIter>>;
+
+ _Iterator() requires default_initializable<_OuterIter> = default;
+
+ constexpr
+ _Iterator(_Iterator<!_Const> __i)
+ requires _Const
+ && convertible_to<iterator_t<_Vp>, _OuterIter>
+ && convertible_to<iterator_t<_InnerRange>, _InnerIter>
+ && convertible_to<iterator_t<_Pattern>, _PatternIter>
+ : _M_parent(__i._M_parent),
+ _M_outer_it(std::move(__i._M_outer_it))
+ {
+ if (__i._M_inner_it.index() == 0)
+ _M_inner_it.template emplace<0>(std::get<0>(std::move(__i._M_inner_it)));
+ else
+ _M_inner_it.template emplace<1>(std::get<1>(std::move(__i._M_inner_it)));
+ }
+
+ constexpr common_reference_t<iter_reference_t<_InnerIter>,
+ iter_reference_t<_PatternIter>>
+ operator*() const
+ {
+ if (_M_inner_it.index() == 0)
+ return *std::get<0>(_M_inner_it);
+ else
+ return *std::get<1>(_M_inner_it);
+ }
+
+ constexpr _Iterator&
+ operator++()
+ {
+ if (_M_inner_it.index() == 0)
+ ++std::get<0>(_M_inner_it);
+ else
+ ++std::get<1>(_M_inner_it);
+ _M_satisfy();
+ return *this;
+ }
+
+ constexpr void
+ operator++(int)
+ { ++*this; }
+
+ constexpr _Iterator
+ operator++(int)
+ requires _S_ref_is_glvalue
+ && forward_iterator<_OuterIter> && forward_iterator<_InnerIter>
+ {
+ _Iterator __tmp = *this;
+ ++*this;
+ return __tmp;
+ }
+
+ constexpr _Iterator&
+ operator--()
+ requires _S_ref_is_glvalue
+ && bidirectional_range<_Base>
+ && __detail::__bidirectional_common<_InnerBase>
+ && __detail::__bidirectional_common<_PatternBase>
+ {
+ if (_M_outer_it == ranges::end(_M_parent->_M_base))
+ {
+ auto&& __inner = *--_M_outer_it;
+ _M_inner_it.template emplace<1>(ranges::end(__inner));
+ }
+
+ while (true)
+ {
+ if (_M_inner_it.index() == 0)
+ {
+ auto& __it = std::get<0>(_M_inner_it);
+ if (__it == ranges::begin(_M_parent->_M_pattern))
+ {
+ auto&& __inner = *--_M_outer_it;
+ _M_inner_it.template emplace<1>(ranges::end(__inner));
+ }
+ else
+ break;
+ }
+ else
+ {
+ auto& __it = std::get<1>(_M_inner_it);
+ auto&& __inner = *_M_outer_it;
+ if (__it == ranges::begin(__inner))
+ _M_inner_it.template emplace<0>(ranges::end(_M_parent->_M_pattern));
+ else
+ break;
+ }
+ }
+
+ if (_M_inner_it.index() == 0)
+ --std::get<0>(_M_inner_it);
+ else
+ --std::get<1>(_M_inner_it);
+ return *this;
+ }
+
+ constexpr _Iterator
+ operator--(int)
+ requires _S_ref_is_glvalue && bidirectional_range<_Base>
+ && __detail::__bidirectional_common<_InnerBase>
+ && __detail::__bidirectional_common<_PatternBase>
+ {
+ _Iterator __tmp = *this;
+ --*this;
+ return __tmp;
+ }
+
+ friend constexpr bool
+ operator==(const _Iterator& __x, const _Iterator& __y)
+ requires _S_ref_is_glvalue
+ && equality_comparable<_OuterIter> && equality_comparable<_InnerIter>
+ { return __x._M_outer_it == __y._M_outer_it && __x._M_inner_it ==__y._M_inner_it; }
+
+ friend constexpr common_reference_t<iter_rvalue_reference_t<_InnerIter>,
+ iter_rvalue_reference_t<_PatternIter>>
+ iter_move(const _Iterator& __x)
+ {
+ if (__x._M_inner_it.index() == 0)
+ return ranges::iter_move(std::get<0>(__x._M_inner_it));
+ else
+ return ranges::iter_move(std::get<1>(__x._M_inner_it));
+ }
+
+ friend constexpr void
+ iter_swap(const _Iterator& __x, const _Iterator& __y)
+ requires indirectly_swappable<_InnerIter, _PatternIter>
+ {
+ if (__x._M_inner_it.index() == 0)
+ {
+ if (__y._M_inner_it.index() == 0)
+ ranges::iter_swap(std::get<0>(__x._M_inner_it), std::get<0>(__y._M_inner_it));
+ else
+ ranges::iter_swap(std::get<0>(__x._M_inner_it), std::get<1>(__y._M_inner_it));
+ }
+ else
+ {
+ if (__y._M_inner_it.index() == 0)
+ ranges::iter_swap(std::get<1>(__x._M_inner_it), std::get<0>(__y._M_inner_it));
+ else
+ ranges::iter_swap(std::get<1>(__x._M_inner_it), std::get<1>(__y._M_inner_it));
+ }
+ }
+ };
+
+ template<input_range _Vp, forward_range _Pattern>
+ requires view<_Vp> && view<_Pattern>
+ && input_range<range_reference_t<_Vp>>
+ && __detail::__compatible_joinable_ranges<range_reference_t<_Vp>, _Pattern>
+ template<bool _Const>
+ class join_with_view<_Vp, _Pattern>::_Sentinel
+ {
+ using _Parent = __detail::__maybe_const_t<_Const, join_with_view>;
+ using _Base = join_with_view::_Base<_Const>;
+
+ sentinel_t<_Base> _M_end = sentinel_t<_Base>();
+
+ constexpr explicit
+ _Sentinel(_Parent& __parent)
+ : _M_end(ranges::end(__parent._M_base))
+ { }
+
+ friend join_with_view;
+
+ public:
+ _Sentinel() = default;
+
+ constexpr
+ _Sentinel(_Sentinel<!_Const> __s)
+ requires _Const && convertible_to<sentinel_t<_Vp>, sentinel_t<_Base>>
+ : _M_end(std::move(__s._M_end))
+ { }
+
+ template<bool _OtherConst>
+ requires sentinel_for<sentinel_t<_Base>,
+ iterator_t<__detail::__maybe_const_t<_OtherConst, _Vp>>>
+ friend constexpr bool
+ operator==(const _Iterator<_OtherConst>& __x, const _Sentinel& __y)
+ { return __x._M_outer_it == __y._M_end; }
+ };
+
+ namespace views
+ {
+ namespace __detail
+ {
+ template<typename _Range, typename _Pattern>
+ concept __can_join_with_view
+ = requires { join_with_view(std::declval<_Range>(), std::declval<_Pattern>()); };
+ } // namespace __detail
+
+ struct _JoinWith : __adaptor::_RangeAdaptor<_JoinWith>
+ {
+ template<viewable_range _Range, typename _Pattern>
+ requires __detail::__can_join_with_view<_Range, _Pattern>
+ constexpr auto
+ operator() [[nodiscard]] (_Range&& __r, _Pattern&& __f) const
+ {
+ return join_with_view(std::forward<_Range>(__r), std::forward<_Pattern>(__f));
+ }
+
+ using _RangeAdaptor<_JoinWith>::operator();
+ static constexpr int _S_arity = 2;
+ template<typename _Pattern>
+ static constexpr bool _S_has_simple_extra_args
+ = _LazySplit::_S_has_simple_extra_args<_Pattern>;
+ };
+
+ inline constexpr _JoinWith join_with;
+ } // namespace views
#endif // C++23
} // namespace ranges
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
index a015fd9..b74565e 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -1507,6 +1507,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ typedef _Tp type; };
/// remove_cv
+#if __has_builtin(__remove_cv)
+ template<typename _Tp>
+ struct remove_cv
+ { using type = __remove_cv(_Tp); };
+#else
template<typename _Tp>
struct remove_cv
{ using type = _Tp; };
@@ -1522,6 +1527,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
struct remove_cv<const volatile _Tp>
{ using type = _Tp; };
+#endif
/// add_const
template<typename _Tp>
@@ -1570,17 +1576,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Reference transformations.
/// remove_reference
+#if __has_builtin(__remove_reference)
template<typename _Tp>
struct remove_reference
- { typedef _Tp type; };
+ { using type = __remove_reference(_Tp); };
+#else
+ template<typename _Tp>
+ struct remove_reference
+ { using type = _Tp; };
template<typename _Tp>
struct remove_reference<_Tp&>
- { typedef _Tp type; };
+ { using type = _Tp; };
template<typename _Tp>
struct remove_reference<_Tp&&>
- { typedef _Tp type; };
+ { using type = _Tp; };
+#endif
/// add_lvalue_reference
template<typename _Tp>
@@ -3358,20 +3370,23 @@ template<typename _Ret, typename _Fn, typename... _Args>
*/
#define __cpp_lib_remove_cvref 201711L
+#if __has_builtin(__remove_cvref)
template<typename _Tp>
struct remove_cvref
- : remove_cv<_Tp>
- { };
+ { using type = __remove_cvref(_Tp); };
+#else
+ template<typename _Tp>
+ struct remove_cvref
+ { using type = typename remove_cv<_Tp>::type; };
template<typename _Tp>
struct remove_cvref<_Tp&>
- : remove_cv<_Tp>
- { };
+ { using type = typename remove_cv<_Tp>::type; };
template<typename _Tp>
struct remove_cvref<_Tp&&>
- : remove_cv<_Tp>
- { };
+ { using type = typename remove_cv<_Tp>::type; };
+#endif
template<typename _Tp>
using remove_cvref_t = typename remove_cvref<_Tp>::type;
diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc b/libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc
index d1f7690..9dde4fb 100644
--- a/libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc
@@ -15,6 +15,8 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
+// { dg-require-effective-target hosted }
+
// 25.3.1.2 [lib.stable.sort]
#include <algorithm>
diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc
new file mode 100644
index 0000000..8b9c6c4
--- /dev/null
+++ b/libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc
@@ -0,0 +1,103 @@
+// { dg-options "-std=gnu++23" }
+// { dg-do run { target c++23 } }
+
+#include <ranges>
+#include <algorithm>
+#include <string>
+#include <testsuite_hooks.h>
+#include <testsuite_iterators.h>
+
+namespace ranges = std::ranges;
+namespace views = std::views;
+using namespace std::literals;
+
+constexpr bool
+test01()
+{
+ std::string_view rs[] = {"hello", "world"};
+ auto v = rs | views::join_with(' ');
+ VERIFY( ranges::equal(v | views::split(' '), rs, ranges::equal) );
+ auto i = v.begin(), j = v.begin();
+ VERIFY( i == j );
+ ++i;
+ i++;
+ VERIFY( i != j );
+ VERIFY( *i == 'l' );
+ --i;
+ i--;
+ VERIFY( *i == 'h' );
+ return true;
+}
+
+constexpr bool
+test02()
+{
+ std::string_view rs[] = {"the", "quick", "brown", "fox"};
+ auto v = rs
+ | views::transform([](auto x) { return x; })
+ | views::filter([](auto) { return true; });
+ VERIFY( ranges::equal(v | views::join_with(views::empty<char>), "thequickbrownfox"sv) );
+ VERIFY( ranges::equal(v | views::join_with('-'), "the-quick-brown-fox"sv) );
+ VERIFY( ranges::equal(v | views::join_with("--"sv), "the--quick--brown--fox"sv) );
+ VERIFY( ranges::empty(views::empty<int[3]> | views::join_with(0)));
+ VERIFY( ranges::equal(views::single(std::array{42}) | views::join_with(0), (int[]){42}));
+ return true;
+}
+
+constexpr bool
+test03()
+{
+ using __gnu_test::test_input_range;
+ using __gnu_test::test_forward_range;
+ using __gnu_test::test_bidirectional_range;
+
+ using ty1 = ranges::join_with_view<views::all_t<test_input_range<test_input_range<int>>>,
+ views::all_t<test_forward_range<int>>>;
+ static_assert(ranges::input_range<ty1>);
+ static_assert(!ranges::forward_range<ty1>);
+ static_assert(!ranges::common_range<ty1>);
+
+ using ty2 = ranges::join_with_view<views::all_t<test_forward_range<test_forward_range<int>>>,
+ views::all_t<test_forward_range<int>>>;
+ static_assert(ranges::forward_range<ty2>);
+ static_assert(!ranges::bidirectional_range<ty2>);
+ static_assert(!ranges::common_range<ty2>);
+
+ using ty3 = ranges::join_with_view<views::all_t<std::array<std::string_view, 3>>,
+ std::string_view>;
+ static_assert(ranges::bidirectional_range<ty3>);
+ static_assert(!ranges::random_access_range<ty3>);
+ static_assert(ranges::common_range<ty3>);
+
+ return true;
+}
+
+#if _GLIBCXX_USE_CXX11_ABI
+constexpr
+#endif
+bool
+test04()
+{
+ std::string rs[] = {"a", "", "b", "", "c"};
+ auto v = rs | views::join_with(' ');
+ VERIFY( ranges::equal(v, "a b c"sv) );
+ auto i = v.begin();
+ auto j = ranges::next(i, 3);
+ ranges::iter_swap(i, j);
+ *j = ranges::iter_move(i);
+ VERIFY( ranges::equal(v, "b b c"sv) );
+ return true;
+}
+
+int
+main()
+{
+ static_assert(test01());
+ static_assert(test02());
+ static_assert(test03());
+#if _GLIBCXX_USE_CXX11_ABI
+ static_assert(test04());
+#else
+ VERIFY(test04());
+#endif
+}