diff options
author | Martin Liska <mliska@suse.cz> | 2022-10-08 10:19:23 +0200 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2022-10-08 10:19:23 +0200 |
commit | d9e7934d25da4a78ffef1f738206aa1d897911df (patch) | |
tree | 1bd1697c14259e095f4b4790946eae7df0c5a2e3 /libstdc++-v3 | |
parent | da0970e441345f8349522ff1abac5c223044ebb1 (diff) | |
parent | 6ffbf87ca66f4ed9cd79cff675fabe2109e46e85 (diff) | |
download | gcc-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/ChangeLog | 102 | ||||
-rw-r--r-- | libstdc++-v3/acinclude.m4 | 22 | ||||
-rwxr-xr-x | libstdc++-v3/configure | 37 | ||||
-rw-r--r-- | libstdc++-v3/doc/html/manual/bugs.html | 400 | ||||
-rw-r--r-- | libstdc++-v3/doc/xml/manual/intro.xml | 387 | ||||
-rw-r--r-- | libstdc++-v3/include/Makefile.in | 101 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/functexcept.h | 25 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/invoke.h | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/random.h | 39 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/std_function.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/c_global/cstdint | 59 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/random | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/std/bitset | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/std/coroutine | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/std/functional | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/std/ranges | 483 | ||||
-rw-r--r-- | libstdc++-v3/include/std/type_traits | 33 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc | 103 |
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<< uses width() value wrong</em></span> + <span class="bold"><strong>String operator<< 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&</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>> for strings</em></span> + <span class="bold"><strong>Incorrect description of operator>> 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>> and getline() for string<> - might cause endless loop</em></span> + <span class="bold"><strong>Description of operator>> and getline() for string<> + 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<<</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>>(istream&, string&) doesn't set failbit</em></span> + <span class="bold"><strong>operator>>(istream&, string&) doesn't set failbit</strong></span> </span></dt><dd><p>If nothing is extracted into the string, <code class="code">op>></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<T>::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 == &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 == &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<wchar_t, char, - mbstate_t>::length()</em></span> + <span class="bold"><strong>Default behavior of codecvt<wchar_t, char, + mbstate_t>::length()</strong></span> </span></dt><dd><p>Do not specify what <code class="code">codecvt<wchar_t, char, mbstate_t>::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<>::do_put()</em></span> + <span class="bold"><strong>Bad sprintf format modifier in + money_put<>::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&</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<reverse_iterator<char*> > 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&)</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 &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<void> 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<char>::classic_table() not accessible</em></span> + <span class="bold"><strong>ctype<char>::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>>(int&) broken</em></span> + <span class="bold"><strong>istream::operator>>(int&) 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 -> 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<bool></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<bool></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"><tuple></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"><tuple></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"><utility></code> which is included by <code class="code"><array></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&</code>, not <code class="code">const value_type&</code></em></span> + <span class="bold"><strong><code class="code">match_results::reference</code> should be <code class="code">value_type&</code>, not <code class="code">const value_type&</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<size_t, N></code></em></span> + <span class="bold"><strong><code class="code">tuple_size</code> should always derive from <code class="code">integral_constant<size_t, N></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&&</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&, F&&)</code> + <span class="bold"><strong><code class="code">packaged_task(allocator_arg_t, const Allocator&, F&&)</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<></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>>(basic_istream&, CharT*)</code> makes it hard to avoid buffer overflows - </em></span> + <span class="bold"><strong><code class="code">operator>>(basic_istream&, CharT*)</code> makes it hard to avoid buffer overflows + </strong></span> </span></dt><dd><p>Replace <code class="code">operator>>(basic_istream&, 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<const T></code> specialization is not + <span class="bold"><strong><code class="code">tuple_size<const T></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<T>::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<T></code> conversion from <code class="code">T&&</code> - </em></span> + <span class="bold"><strong><code class="code">reference_wrapper<T></code> conversion from <code class="code">T&&</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<< uses width() value wrong</emphasis> + <emphasis role="bold">String operator<< 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&</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>> for strings</emphasis> + <emphasis role="bold">Incorrect description of operator>> 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>> and getline() for string<> + <emphasis role="bold">Description of operator>> and getline() for string<> 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<>::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<<</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>>(istream&, string&) doesn't set failbit</emphasis> + <emphasis role="bold">operator>>(istream&, string&) doesn't set failbit</emphasis> </term> <listitem><para>If nothing is extracted into the string, <code>op>></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<T>::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 == &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 == &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<wchar_t, char, + <emphasis role="bold">Default behavior of codecvt<wchar_t, char, mbstate_t>::length()</emphasis> </term> <listitem><para>Do not specify what <code>codecvt<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<>::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&</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<reverse_iterator<char*> > 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&)</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 &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<void> 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<char>::classic_table() not accessible</emphasis> + <emphasis role="bold">ctype<char>::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>>(int&) broken</emphasis> + <emphasis role="bold">istream::operator>>(int&) 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 -> 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<bool></code> is missing <code>emplace</code> and <code>emplace_back</code> member functions</emphasis> + <emphasis role="bold"><code>vector<bool></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><tuple></code> header</emphasis> + <emphasis role="bold"><code>tuple_size</code> for <code>const pair</code> request <code><tuple></code> header</emphasis> </term> <listitem><para>The <code>tuple_size</code> and <code>tuple_element</code> partial specializations are defined in <code><utility></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&</code>, not <code>const value_type&</code></emphasis> + <emphasis role="bold"><code>match_results::reference</code> should be <code>value_type&</code>, not <code>const value_type&</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<size_t, N></code></emphasis> + <emphasis role="bold"><code>tuple_size</code> should always derive from <code>integral_constant<size_t, N></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&&</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&, F&&)</code> + <emphasis role="bold"><code>packaged_task(allocator_arg_t, const Allocator&, F&&)</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&, CharT*)</code> makes it hard to avoid buffer overflows - </emphasis> + <emphasis role="bold"><code>operator>>(basic_istream&, CharT*)</code> makes it hard to avoid buffer overflows + </emphasis> </term> <listitem><para>Replace <code>operator>>(basic_istream&, 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<const T></code> specialization is not + <emphasis role="bold"><code>tuple_size<const T></code> specialization is not SFINAE compatible and breaks decomposition declarations - </emphasis> + </emphasis> </term> <listitem><para>Safely detect <code>tuple_size<T>::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<T></code> conversion from <code>T&&</code> - </emphasis> + <emphasis role="bold"><code>reference_wrapper<T></code> conversion from <code>T&&</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 +} |