|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r51612 - in sandbox/committee/LWG: . proposals
From: bdawes_at_[hidden]
Date: 2009-03-04 14:25:44
Author: bemandawes
Date: 2009-03-04 14:25:42 EST (Wed, 04 Mar 2009)
New Revision: 51612
URL: http://svn.boost.org/trac/boost/changeset/51612
Log:
2PM Wednesday. All current sub-group diffs applied.
Removed:
sandbox/committee/LWG/0xCD1_Comments.html
Text files modified:
sandbox/committee/LWG/LWG_0xCD1_status.html | 203 ++++++++++++++++++++++++---------------
sandbox/committee/LWG/proposals/n2636.html | 20 +--
sandbox/committee/LWG/thread_safety.html | 24 ++--
3 files changed, 140 insertions(+), 107 deletions(-)
Deleted: sandbox/committee/LWG/0xCD1_Comments.html
==============================================================================
--- sandbox/committee/LWG/0xCD1_Comments.html 2009-03-04 14:25:42 EST (Wed, 04 Mar 2009)
+++ (empty file)
@@ -1,13924 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<meta name="generator" content=
-"Microsoft FrontPage 5.0">
- <meta name="generator" content="Microsoft FrontPage 5.0">
- <meta name="generator" content="Microsoft FrontPage 5.0">
- <meta http-equiv="CONTENT-TYPE" content=
- "text/html; charset=us-ascii">
-
- <title>LWG CD1 Status of Comments</title>
- <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
- <meta name="AUTHOR" content="dow">
- <meta name="CREATED" content="20090221;19590000">
- <meta name="CHANGEDBY" content=" Barry E Hedquist">
- <meta name="CHANGED" content="20090222;18460000">
- <meta name="DESCRIPTION" content="FORM (ISO)">
-<style type="text/css">
- body { font-family: sans-serif; margin: 1em; }
-</style>
-
-<h1>Library Working Group<br>
-Status of CD1 National Body Comments</h1>
-<p>Revised:
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %b %Y %I:%M:%S %p %Z" startspan -->03 Mar 2009 08:36:37 AM -0500<!--webbot bot="Timestamp" endspan i-checksum="41905" --></p>
-
-<table border="1" bordercolor="#000000" cellpadding="7"
- cellspacing="0" style="border-collapse: collapse" width="1628">
-
- <tr valign="top">
- <td width="29">
- <p><b>MB</b><b><br></b><br>
-
- <td width="75">
- <p><b>Clause No./<br>
- Subclause No./<br>
- Annex<br></b>(e.g. 3.1)
-
- <td width="31">
- <p><b>Para/<br>
- Figure/<br>Table/<br>Note</b><td width="38">
- <p><b>Type </b>
-
- <td width="375">
- <p><b>Comment (justification for change) by the MB</b>
-
- <td width="466">
- <p><b>Proposed change by the MB</b>
-
- <td width="225">
- <p align="center" style=
- "margin-top: 0.07in; margin-bottom: 0.04in; page-break-inside: avoid">
- <b>Disposition</b>
-
- <p>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 2
-
- <td width="75">
- <p align="left">17-30
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">ge/te
-
- <td width="375">
- <p align="left">The
- active issues identified in WG21 N2806, C++ Standard
- Library Active Issues, must be addressed and appropriate
- action taken.
-
- <p align="left">
- <br>
-
- <p align="left">
- <font color="#000080"><u><a href=
- "http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html">
- http://www.open-std.org/><br>
- <a href=
- "http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html">
- jtc1/sc22/wg21/docs/lwg-active.html</a></u></font>
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Appropriate action would
- include making changes to the CD, identifying an issue as
- not requiring a change to the CD, or deferring the issue to
- a later point in time.
-
- <td width="225">
- <p>
-
- Acknowledged<tr valign="top">
- <td width="29">
- <p>FR 2
-
- <td width="75">
- <p>General<br>
- Comment
-
- <td width="31">
- <p>Library
-
- <td width="38">
- <p>ge
-
- <td width="375">
- <p>The adoption of the library `constexpr' proposal was not
- reflected in the draft, despite formal WG21 committee vote.
-
- <td width="466">
- <p>FR 2
-
- <td width="225">
- <p>Editorial; sent to Pete Becker<tr valign="top">
- <td width="29">
- <p align="left">US 61
-
- <td width="75">
- <p align="left">17 onward
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p>The concepts core language feature is applied to only
- some of the Standard Library clauses, and even then not
- always consistently.
-
- <td width="466">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Review all
- clauses of the Standard Library, and consistently apply
- concept technology wherever possible and appropriate. The
- proposed wording in WG21 N2781 exemplifies the necessary
- level of detail.
-
- <p>
-
- <td width="225">
- <p>
-
- Agreed. Duplicates CA2<tr valign="top">
- <td width="29">
- <p>CA-2
-
- <td width="75">
- <p style="margin-top: 0.04in">17 Library
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>Ge
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- “Concepts” are a significant new addition to
- the language, but are not exploited uniformly in the
- library as documented in CD 14882.
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Fix
- the standard library so that “Concepts” are
- used appropriately in the library.
-
- <td width="225">
- <p>
-
- Agreed; We intend to address this.<tr valign="top">
- <td width="29">
- <p align="left">US 62
-
- <td width="75">
- <p align="left">17-30
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">ge
-
- <td width="375">
- <p align="left">Provide concepts
- and requirements clauses for all standard library templates
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left">Agreed. Duplicates CA2<br>
-
- <tr valign="top">
- <td width="29">
- <p>US 63
-
- <td width="75">
- <p style="margin-top: 0.04in; margin-bottom: 0.04in">17-30
-
- <p>
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>The behavior of the library in the presence of threads
- is incompletely specified.
-
- <p>For example, if thread 1 assigns to X, then writes data
- to file f, which is read by thread 2, and then accesses
- variable X, is thread 2 guaranteed to be able to see the
- value assigned to X by thread 1? In other words, does the
- write of the data "happen before" the read?
-
- <p>Another example: does simultaneous access using operator
- at() to different characters in the same non-const string
- really introduce a data race?
-
- <td width="466">
- <p>
-
- <td width="225">
- <p>
-
- 17 SG: should go to threads group; misclassified in document<p>
-
- Concurrency SG: Create an issue. Hans will look into it.<tr valign="top">
- <td width="29">
- <p>DE-2
-
- <td width="75">
- <p>17 through 30
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>DE-2 Marking a constructor with "explicit" has semantics
- even for a constructor with zero or several parameters:
- Such a constructor cannot be used with list-initialization
- in a copy-initialization context, see 13.3.1.7. The
- standard library apparently has not been reviewed for
- marking non-single-parameter constructors as "explicit".
-
- <td width="466">
- <p>Consider marking zero-parameter and multi-parameter
- constructors "explicit" in classes that have at least one
- constructor marked "explicit" and that do not have an
- initializer-list constructor.
-
- <td width="225">
- <p>
-
- Robert Klarer to address this one<tr valign="top">
- <td width="29">
- <p>JP 21
-
- <td width="75">
- <p align="left">
- <br>
-
- <p align="left">17
- Library
-
- <p align="left">
- 21.2, 21.4,
-
- <p align="left">27.2, 27.6,<br>
- 27.7,<br>
- 27.8.1,<br>
- 28.4
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left">
- Support of char16_t/char32_t is insufficient. The basic_xxx
- classes of <iostream>, <fstream>,
- <regex>, etc. does not have typedefs for
- char16_t/char32_t.
-
- <p align="left" style="margin-top: 0.04in">
- Functions such as stoi, to_string in ‘21.4 Numeric
- Conversion’ does not support char16_t/char32_t types.
-
- <td width="466">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Add commented
- lines corresponding to char16_t, char32_t.
-
- <p align="left">
- <br>
-
- <p align="left">
- 21.2 paragraph1
-
- <p align="left">
-
-
- <p align="left">
- namespace std {
-
- <p align="left">
- ...
-
- <p align="left">
-
-
- <p align="left">
- // 21.4: numeric conversions
-
- <p align="left">
- ...
-
- <p align="left">
-
-
- <p align="left">
- int stoi(const u16string& str, size_t *idx = 0,
- int base = 10);
-
- <p align="left">
- long stol(const u16string& str, size_t *idx = 0,
- int base = 10);
-
- <p align="left">
- unsigned long stoul(const u16string& str, size_t
- *idx = 0, int base = 10);
-
- <p align="left">
- long long stoll(const u16string& str, size_t *idx
- = 0, int base = 10);
-
- <p align="left">
- unsigned long long stoull(const u16string& str,
- size_t *idx = 0, int base = 10);
-
- <p align="left">
- float stof(const u16string& str, size_t *idx =
- 0);
-
- <p align="left">
- double stod(const u16string& str, size_t *idx =
- 0);
-
- <p align="left">
- long double stold(const u16string& str, size_t
- *idx = 0);
-
- <p align="left">
- u16string to_u16string(long long val);
-
- <p align="left">
- u16string to_u16string(unsigned long long val);
-
- <p align="left">
- u16string to_u16string(long double val);
-
- <p align="left">
-
-
- <p align="left">
- int stoi(const u32string& str, size_t *idx = 0,
- int base = 10);
-
- <p align="left">
- long stol(const u32string& str, size_t *idx = 0,
- int base = 10);
-
- <p align="left">
- unsigned long stoul(const u32string& str, size_t
- *idx = 0, int base = 10);
-
- <p align="left">
- long long stoll(const u32string& str, size_t *idx
- = 0, int base = 10);
-
- <p align="left">
- unsigned long long stoull(const u32string& str,
- size_t *idx = 0, int base = 10);
-
- <p align="left">
- float stof(const u32string& str, size_t *idx =
- 0);
-
- <p align="left">
- double stod(const u32string& str, size_t *idx =
- 0);
-
- <p align="left">
- long double stold(const u32string& str, size_t
- *idx = 0);
-
- <p align="left">
- u32string to_u32string(long long val);
-
- <p align="left">
- u32string to_u32string(unsigned long long val);
-
- <p align="left">
- u32string to_u32string(long double val);
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- 27.2
-
- <p align="left">
-
-
- <p align="left">
- namespace std {
-
- <p align="left">
- ...
-
- <p align="left">
- typedef basic_ios<char> ios;
-
- <p align="left">
- typedef basic_ios<wchar_t> wios;
-
- <p align="left">
- typedef basic_ios<char16_t> u16ios;
-
- <p align="left">
- typedef basic_ios<char32_t> u32ios;
-
- <p align="left">
-
-
- <p align="left">
- ...
-
- <p align="left">
- typedef basic_ifstream<wchar_t> wifstream;
-
- <p align="left">
- typedef basic_ofstream<wchar_t> wofstream;
-
- <p align="left">
- typedef basic_fstream<wchar_t> wfstream;
-
- <p align="left">
-
-
- <p align="left">
- typedef basic_streambuf<char16_t> u16streambuf;
-
- <p align="left">
- typedef basic_istream<char16_t> u16istream;
-
- <p align="left">
- typedef basic_ostream<char16_t> u16ostream;
-
- <p align="left">
- typedef basic_iostream<char16_t> u16iostream;
-
- <p align="left">
-
-
- <p align="left">
- typedef basic_stringbuf<char16_t> u16stringbuf;
-
- <p align="left">
- typedef basic_istringstream<char16_t>
- u16istringstream;
-
- <p align="left">
- typedef basic_ostringstream<char16_t>
- u16ostringstream;
-
- <p align="left">
- typedef basic_stringstream<char16_t>
- u16stringstream;
-
- <p align="left">
- typedef basic_filebuf<char16_t> u16filebuf;
-
- <p align="left">
-
-
- <p align="left">
- typedef basic_ifstream<char16_t> u16ifstream;
-
- <p align="left">
- typedef basic_ofstream<char16_t> u16ofstream;
-
- <p align="left">
- typedef basic_fstream<char16_t> u16fstream;
-
- <p align="left">
-
-
- <p align="left">
- typedef basic_streambuf<char32_t> u32streambuf;
-
- <p align="left">
- typedef basic_istream<char32_t> u32istream;
-
- <p align="left">
- typedef basic_ostream<char32_t> u32ostream;
-
- <p align="left">
- typedef basic_iostream<char32_t> u32iostream;
-
- <p align="left">
-
-
- <p align="left">
- typedef basic_stringbuf<char32_t> u32stringbuf;
-
- <p align="left">
- typedef basic_istringstream<char32_t>
- u32istringstream;
-
- <p align="left">
- typedef basic_ostringstream<char32_t>
- u32ostringstream;
-
- <p align="left">
- typedef basic_stringstream<char32_t>
- u32stringstream;
-
- <p align="left">
- typedef basic_filebuf<char32_t> u32filebuf;
-
- <p align="left">
-
-
- <p align="left">
- typedef basic_ifstream<char32_t> u32ifstream;
-
- <p align="left">
- typedef basic_ofstream<char32_t> u32ofstream;
-
- <p align="left">
- <u> typedef basic_fstream<char32_t>
- u32fstream;</u>
-
- <p align="left">
-
-
- <p align="left">
- ...
-
- <p align="left">
- template <class state> class fpos;
-
- <p align="left">
- typedef
- fpos<char_traits<char>::state_type> streampos;
-
- <p align="left">
- typedef
- fpos<char_traits<wchar_t>::state_type>
- wstreampos;
-
- <p align="left">
- typedef
- fpos<char_traits<char16_t>::state_type>
- u16streampos;
-
- <p align="left">
- typedef
- fpos<char_traits<char32_t>::state_type>
- u32streampos;
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- 27.6
-
- <p align="left">
-
-
- <p align="left">
- namespace std {
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
-
- <p align="left">
- class basic_istream;
-
- <p align="left">
- typedef basic_istream<char> istream;
-
- <p align="left">
- typedef basic_istream<wchar_t> wistream;
-
- <p align="left">
- <u>typedef basic_istream<char16_t>
- u16istream;</u>
-
- <p align="left">
- typedef basic_istream<char32_t> u32istream;
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
-
- <p align="left">
- class basic_iostream;
-
- <p align="left">
- typedef basic_iostream<char> iostream;
-
- <p align="left">
- typedef basic_iostream<wchar_t> wiostream;
-
- <p align="left">
- <u>typedef basic_iostream<char16_t>
- u16iostream;</u>
-
- <p align="left">
- typedef basic_iostream<char32_t> u32iostream;
-
- <p align="left">}
-
- <p align="left">
-
-
- <p align="left">
- namespace std {
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
-
- <p align="left">
- class basic_ostream;
-
- <p align="left">
- typedef basic_ostream<char> ostream;
-
- <p align="left">
- typedef basic_ostream<wchar_t> wostream;
-
- <p align="left">
- <u>typedef basic_ostream<char16_t>
- u16ostream;</u>
-
- <p align="left">
- typedef basic_ostream<char32_t> u32ostream;
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- 27.7 paragraph 1
-
- <p align="left">
-
-
- <p align="left">
- namespace std {
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
-
- <p align="left">
- class Allocator =
- allocator<charT> >
-
- <p align="left">
- class basic_stringbuf;
-
- <p align="left">
-
-
- <p align="left">
- typedef basic_stringbuf<char> stringbuf;
-
- <p align="left">
- typedef basic_stringbuf<wchar_t> wstringbuf;
-
- <p align="left">
- <u>typedef basic_stringbuf<char16_t>
- u16stringbuf;</u>
-
- <p align="left">
- typedef basic_stringbuf<char32_t> u32stringbuf;
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
-
- <p align="left">
- class Allocator =
- allocator<charT> >
-
- <p align="left">
- class basic_istringstream;
-
- <p align="left">
-
-
- <p align="left">
- typedef basic_istringstream<char>
- istringstream;
-
- <p align="left">
- typedef basic_istringstream<wchar_t>
- wistringstream;
-
- <p align="left">
- <u>typedef basic_istringstream<char16_t>
- u16istringstream;</u>
-
- <p align="left">
- typedef basic_istringstream<char32_t>
- u32istringstream;
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
-
- <p align="left">
- class Allocator =
- allocator<charT> >
-
- <p align="left">
- class basic_ostringstream;
-
- <p align="left">
-
-
- <p align="left">
- typedef basic_ostringstream<char>
- ostringstream;
-
- <p align="left">
- typedef basic_ostringstream<wchar_t>
- wostringstream;
-
- <p align="left">
- <u>typedef basic_ostringstream<char16_t>
- u16ostringstream;</u>
-
- <p align="left">
- typedef basic_ostringstream<char32_t>
- u32ostringstream;
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
-
- <p align="left">
- class Allocator =
- allocator<charT> >
-
- <p align="left">
- class basic_stringstream;
-
- <p align="left">
-
-
- <p align="left">
- typedef basic_stringstream<char> stringstream;
-
- <p align="left">
- typedef basic_stringstream<wchar_t>
- wstringstream;
-
- <p align="left">
- typedef basic_stringstream<char16_t>
- u16stringstream;
-
- <p align="left">
- typedef basic_stringstream<char32_t>
- u32stringstream;
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- 27.8.1 paragraph 1
-
- <p align="left">
-
-
- <p align="left">
- namespace std {
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
-
- <p align="left">
- class basic_filebuf;
-
- <p align="left">
- typedef basic_filebuf<char> filebuf;
-
- <p align="left">
- typedef basic_filebuf<wchar_t> wfilebuf;
-
- <p align="left">
- <u>typedef basic_filebuf<char16_t>
- u16filebuf;</u>
-
- <p align="left">
- typedef basic_filebuf<char32_t> u32filebuf;
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
-
- <p align="left">
- class basic_ifstream;
-
- <p align="left">
- typedef basic_ifstream<char> ifstream;
-
- <p align="left">
- typedef basic_ifstream<wchar_t> wifstream;
-
- <p align="left">
- <u>typedef basic_ifstream<char16_t>
- u16ifstream;</u>
-
- <p align="left">
- typedef basic_ifstream<char32_t> u32ifstream;
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
-
- <p align="left">
- class basic_ofstream;
-
- <p align="left">
- typedef basic_ofstream<char> ofstream;
-
- <p align="left">
- typedef basic_ofstream<wchar_t> wofstream;
-
- <p align="left">
- <u>typedef basic_ofstream<char16_t>
- u16ofstream;</u>
-
- <p align="left">
- typedef basic_ofstream<char32_t> u32ofstream;
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
-
- <p align="left">
- class basic_fstream;
-
- <p align="left">
- typedef basic_fstream<char> fstream;
-
- <p align="left">
- typedef basic_fstream<wchar_t> wfstream;
-
- <p align="left">
- <u>typedef basic_fstream<char16_t>
- u16fstream;</u>
-
- <p align="left">
- typedef basic_fstream<char32_t> u32fstream;
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- 28.4
-
- <p align="left">
-
-
- <p align="left">
- namespace std {
-
- <p align="left">
- ...
-
- <p align="left">
- typedef basic_regex<char> regex;
-
- <p align="left">
- typedef basic_regex<wchar_t> wregex;
-
- <p align="left">
- typedef basic_regex<char16_t> u16regex;
-
- <p align="left">
- typedef basic_regex<char32_t> u32regex;
-
- <p align="left">
-
-
- <p align="left">
- ...
-
- <p align="left">
- typedef sub_match<const char*> csub_match;
-
- <p align="left">
- typedef sub_match<const wchar_t*> wcsub_match;
-
- <p align="left">
- typedef sub_match<const char16_t*>
- u16csub_match;
-
- <p align="left">
- typedef sub_match<const char32_t*>
- u16csub_match;
-
- <p align="left">
- typedef sub_match<string::const_iterator>
- ssub_match;
-
- <p align="left">
- typedef sub_match<wstring::const_iterator>
- wssub_match;
-
- <p align="left">
- typedef sub_match<u16string::const_iterator>
- u16ssub_match;
-
- <p align="left">
- typedef sub_match<u32string::const_iterator>
- u32ssub_match;
-
- <p align="left">
-
-
- <p align="left">
- ...
-
- <p align="left">
- typedef match_results<const char*> cmatch;
-
- <p align="left">
- typedef match_results<const wchar_t*> wcmatch;
-
- <p align="left">
- typedef match_results<const char16_t*>
- u16cmatch;
-
- <p align="left">
- typedef match_results<const char32_t*>
- u32cmatch;
-
- <p align="left">
- typedef match_results<string::const_iterator>
- smatch;
-
- <p align="left">
- typedef match_results<wstring::const_iterator>
- wsmatch;
-
- <p align="left">
- typedef
- match_results<u16string::const_iterator> u16smatch;
-
- <p align="left">
- typedef
- match_results<u32string::const_iterator> u32smatch;
-
- <p align="left">
-
-
- <p align="left">
- ...
-
- <p align="left">
- typedef regex_iterator<const char*>
- cregex_iterator;
-
- <p align="left">
- typedef regex_iterator<const wchar_t*>
- wcregex_iterator;
-
- <p align="left">
- typedef regex_iterator<const cha16r_t*>
- u16cregex_iterator;
-
- <p align="left">
- typedef regex_iterator<const char32_t*>
- u32cregex_iterator;
-
- <p align="left">
- typedef regex_iterator<string::const_iterator>
- sregex_iterator;
-
- <p align="left">
- typedef regex_iterator<wstring::const_iterator>
- wsregex_iterator;
-
- <p align="left">
- typedef
- regex_iterator<u16string::const_iterator>
- u16sregex_iterator;
-
- <p align="left">
- typedef
- regex_iterator<u32string::const_iterator>
- u32sregex_iterator;
-
- <p align="left">
-
-
- <p align="left">
- ...
-
- <p align="left">
- typedef regex_token_iterator<const char*>
- cregex_token_iterator;
-
- <p align="left">
- typedef regex_token_iterator<const wchar_t*>
- wcregex_token_iterator;
-
- <p align="left">
- typedef regex_token_iterator<const char16_t*>
- u16cregex_token_iterator;
-
- <p align="left">
- typedef regex_token_iterator<const char32_t*>
- u32cregex_token_iterator;
-
- <p align="left">
- typedef
- regex_token_iterator<string::const_iterator>
- sregex_token_iterator;
-
- <p align="left">
- typedef
- regex_token_iterator<wstring::const_iterator><span lang="zxx">
-    </span>wsregex_token_iterator;
-
- <p align="left">
- typedef
- regex_token_iterator<u16string::const_iterator>
- u16sregex_token_iterator;
-
- <p align="left">
- typedef
- regex_token_iterator<u32string::const_iterator><span lang="zxx">
-  </span>u32sregex_token_iterator;
-
- <p align="left">}
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Previously considered; we decided not to do it. We believe it is not too
- onerous to use wbuffer_convert and wstring_convert which were added as
- intermediaries to avoid proliferation of types.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 144
-
- <td width="75">
- <p align="justify">17.1
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">List of contents of library should be
- extened to cover new clauses
-
- <td width="466">
- <p align="left">Add "regular expressions, atomic operations
- and threads"
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 145
-
- <td width="75">
- <p align="justify">17.1
-
- <td width="31">
- <p align="justify">6
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">
- <span lang="en-US">Summary of numeric facilities should
- mention random numbers</span>
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add random number framework to the list of
- library facilities
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 146
-
- <td width="75">
- <p align="justify">17.1
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Add a summary paragraph for regular
- expressions
-
- <td width="466">
- <p align="left">Add a summary paragraph for regular
- expressions
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 147
-
- <td width="75">
- <p align="justify">17.1
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Add a summary paragraph for threads
-
- <td width="466">
- <p align="left">Add a summary paragraph for threads
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 148
-
- <td width="75">
- <p align="justify">17.2
-
- <td width="31">
- <p align="justify">Table 12
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Table 12 is
- mentioned in and relates to section 17.2, but has been
- pushed down to appear directly after the title of section
- 17.3 which is rather unfortunate/confusing for the reader.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Make sure tables are rendered in the
- section to which they relate.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 149
-
- <td width="75">
- <p align="justify">17.3
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">For consistency
- with narrow-oriented and wide-oriented streams, we should
- add terms for streams of Unicode character sequences
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Define Utf16-oriented stream classes and
- Uft32-oriented stream classes for streams of
- char16_t/char32_t values.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 150
-
- <td width="75">
- <p align="justify">17.3
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The addition of move semantics to the
- language means that many library APIs leave an object in a
- safely-destructible state, where no other operations can
- safely be performed unless it is assigned a new value.
- Library presentation would be simplified and made more
- precise if we introduce a term for this state. By analogy
- with singular iterators suggest the term 'singular object'
- or 'the object is in a singular state'.
-
- <td width="466">
- <p align="left">Define 'singular
- state' such that an object with a singular state can only
- be assigned to or safely destroyed. Assiging a new value
- typically removes the singular state. Note that objects
- with a singular state may not be safely copied, so you
- cannot put an object into a singular state by copying
- another object in a singular state. Use this new term in
- the postcondition of all library APIs that move from an
- rvalue reference. It might also be used to simplify the
- definition of singular iterator to an iterator value with a
- singular state.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 151
-
- <td width="75">
- <p align="justify">17.3.1
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Missing
- crossreference to 17.3.17 [defns.repositional.stream]
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add cross-reference in the existing empty
- brackets
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 152
-
- <td width="75">
- <p align="justify">17.3.12
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Object state is
- using a definition of object (instance of a class) from
- outside the standard, rather than the 'region of storage'
- definiton in 1.8p1
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Clarify terms and usage
-
- <td width="225">
- <p>
-
- we think we're removing this; Howard to create LWG issue. Howard, see [func.referenceclosure.cons]<tr valign="top">
- <td width="29">
- <p>UK<br>
- 153
-
- <td width="75">
- <p align="justify">17.3.17
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">If a
- repositional stream can only seek to a position previously
- encountered, then an arbitrary-positional-stream cannot
- satisfy this definition, as cross-referenced in 17.3.17
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Strike the word 'only'. A note might be
- added to reinforce the intent
-
- <td width="225">
- <p>
-
- editorial; sent to Pete Becker<tr valign="top">
- <td width="29">
- <p align="justify" style=
- "margin-right: -0.18in; margin-bottom: 0in">UK<br>
- 154
-
- <p>
-
- <td width="75">
- <p align="justify">17.3.20
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Missing definition of a stable partition
- algorithm
-
- <td width="466">
- <p align="left">Add definition from 25.2.12p7
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 155
-
- <td width="75">
- <p align="justify">17.3.3
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Add clause 28 to list that use this
- definition of character
-
- <td width="466">
- <p align="left">Add clause 28 to list that use this
- definition of character
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 156
-
- <td width="75">
- <p align="justify">17.3.4
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Add regular
- expressions to set of templates using character container
- type
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add regular expressions to set of templates
- using character container type
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 157
-
- <td width="75">
- <p align="justify">17.5.2.2
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Add concepts to
- the ordered list of presentation
-
- <p align="left"><br>
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add concepts into the sequence
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 158
-
- <td width="75">
- <p align="justify">17.5.2.2
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">templates are neither classes nor functions
-
- <td width="466">
- <p align="left">Replace
- 'classes' and 'functions' with 'classes and class
- templates' and 'functions and function templates'
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 159
-
- <td width="75">
- <p align="justify">17.5.2.4
-
- <td width="31">
- <p align="justify">Footnote 152
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">This informative
- footnote was relevant in 1998, not 2008. The term 'existing
- vendors' may imply something different now
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Strike the footnote, or replace 'existing'
- with 'original' or similar
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 160
-
- <td width="75">
- <p align="justify">17.5.2.4
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">requires is now
- a keyword with a specific meaning related to concepts, and
- its use in library specifcation may be confusing. Generally
- the Requires clause is used to make requirements on the
- caller, not the library, so typically providing runtime
- pre-conditions. Suggest a new name to refflect that. Note
- that Clause 30 already seems to be written to this
- convention.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace 'Requires' with 'Preconditions'
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 161
-
- <td width="75">
- <p align="justify">17.5.2.4
-
- <td width="31">
- <p align="justify">4
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">This paragraph
- is redundant as the definition of the term 'handler
- function' is already provided in 17.3. Are we in danger of
- proving two definitions of the same terms? Which is the
- 'controlling' definition?
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Strike 17.5.2.4p4
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 162
-
- <td width="75">
- <p align="justify">17.5.2.4
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Clause 30 makes
- use of a 'Synchronization' semantic element, that
- frequently appears either between Effects: and
- Postconditions:, or between Returns: and Throws:
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add 'Synchronization' to the list either
- between Effects: and Postconditions:, or between Returns:
- and Throws:.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 163
-
- <td width="75">
- <p align="justify">17.5.2.4
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Many functions
- are defined as "Effects: Equivalent to a...", which seems
- to also define the preconditions, effects, etc. But this is
- not made clear.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Introduce an explicit "Equivalent to",
- which defines all of the properties of the function.
-
- <td width="225">
- <p>
-
- Tom Plum to open LWG issue; we believe this is related to LWG625<tr valign="top">
- <td width="29">
- <p>UK<br>
- 164
-
- <td width="75">
- <p align="justify">17.5.3.2.1
-
- <td width="31">
- <p align="justify">1
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">This phrasing predates concepts. While this
- kind of description is still used, the examples provided
- are now all concepts, and should be replaced with
- appropriate examples
-
- <td width="466">
- <p align="left">Use better names
- for the examples. Ideally totally replace the need by
- constraining all templates in library, so that real
- concepts are all that is needed. Note if retained that
- CopyConstructible is mis-spelled.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 165
-
- <td width="75">
- <p align="justify">17.5.3.2.2,<br>
- 17.5.3.2.3
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">constraints on
- bitmask and enumation types were supposed to be tightened
- up as part of the motivation for the constexpr feature -
- see paper n2235 for deails
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Adopt wording in line with the motivation
- described in N2235
-
- <td width="225">
- <p>
-
- Robert Klarer to review<tr valign="top">
- <td width="29">
- <p>UK<br>
- 166
-
- <td width="75">
- <p align="justify">17.5.3.2.4.1,<br>
- 17.5.3.3
-
- <p align="justify"><br>
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">List of library clauses should go up to 30,
- not 27
-
- <td width="466">
- <p align="left">Replace initial refernce to ch27 with ch30
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 167
-
- <td width="75">
- <p align="justify">17.5.3.4<br>
- Private<br>
- members
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Comment marker in wrong place.
-
- <td width="466">
- <p align="left">Change: //
- streambuf* sb; exposition only to streambuf* sb; //
- exposition only To reflect actual usage.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 168
-
- <td width="75">
- <p align="justify">17.6.2.2
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">We should make
- it clear (either by note or normatively) that namespace std
- may contain inline namespaces, and that entities specified
- to be defined in std may in fact be defined in one of these
- inline namespaces. (If we're going to use them for
- versioning, eg when TR2 comes along, we're going to need
- that.)
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace "namespace std or namespaces nested
- within namespace std" with "namespace std or namespaces
- nested within namespace std or inline namespaces nested
- directly or indirectly within namespace std"
-
- <td width="225">
- <p>
-
- Howard will create issue to adopt UK words (some have reservations whether
- it is correct)<tr valign="top">
- <td width="29">
- <p>UK<br>
- 169
-
- <td width="75">
- <p align="justify">17.6.2.2
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">This phrasing
- contradicts later freedom to implement the C standard
- library portions in the global namespace as well as std.
- (17.6.2.3p4)
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Resolve conflict in either place
-
- <td width="225">
- <p>
-
- Bill Plaugher to open issue. If the wording is too broad we need to add an
- exception to the standard C library.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 170
-
- <td width="75">
- <p align="justify">17.6.2.3
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">One of goals of
- C++0x is to make language easier to teach and for
- 'incidental' programmers. The fine-grained headers of the
- C++ library are valuable in large scale systems for
- managing dependencies and optimising build times, but
- overcomplicated for simple development and tutorials. Add
- additional headers to support the whole library through a
- single include statement.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add a new header <std> that has the
- effect of including everything in tables 13 and 14, except
- <iosfwd> and <cassert>. Add an additional
- header <fwd> that adds all declarations from
- <std> but no definitions.
-
- <td width="225">
- <p>
-
- Alisdair to open issue. We prefer
- <std>only. </std>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 171
-
- <td width="75">
- <p align="justify">17.6.2.4
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Does
- freestanding implementation require a full implementation
- of all listed headers? The reference to abort, at_exit and
- exit is confusing. Is a conforming implementation allow to
- deliver partial forms of these headers? If so which ones?
- Are empty versions of everything but <cstdlib>
- conforming?
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Either strike the references to abort,
- at_exit and exit, or clarify which headers only require
- partial support.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 172
-
- <td width="75">
- <p align="justify">17.6.2.4
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">No reference to
- new functions quick_exit and at_quick_exit
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add reference to quick_exit and
- at_quick_exit
-
- <td width="225">
- <p>
-
- NAD. We do not belive at_exit and at_quick_exit should be required by
- freestanding implementations.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 173
-
- <td width="75">
- <p align="justify">17.6.2.4
-
- <td width="31">
- <p align="justify">table 15
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">
- <initializer_list> is missing from headers required
- in freestanding implementations.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add 18.8, initializer lists,
- <initializer_list>, to the end of the table.
-
- <td width="225">
- <p>
-
- LWG is interested in N2814, but we're concerned whether CWG will accept
- language recommendations.<tr valign="top">
- <td width="29">
- <p>JP 23
-
- <td width="75">
- <p align="left">17.6.2.4
-
- <td width="31">
- <p align="left">2<sup>nd</sup> <font size="2"
- style="font-size: 11pt">para, Table 15</font>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">There is a
- freestanding implementation including <type_traits>,
- <array>, <ratio>, lately added to Table 13, C++
- library headers.<br>
- Programmers think them useful and hope that these headers
- are also added to Table 15, C++ headers for freestanding
- implementations, that shows the set of headers which a
- freestanding implementation shall include at least.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- <type_traits>, <array>, <ration> to Table
- 15.
-
- <td width="225">
- <p>
-
- LWG is interested in N2814, but we're concerned whether CWG will accept
- language recommendations.<p>
-
- add <type_traits> only. Alisdair will draft an issue.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 174
-
- <td width="75">
- <p align="justify">17.6.3.2
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The phrasing is
- mildly ambiguous when using the word 'it' to refer back to
- the header - an unfotunate reading might confuse it with
- the translate unit, which is the subject of the surrounding
- clause.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace 'the first reference to any of the
- entities declared in that header by the translation unit'
- with 'the first reference to any of the entities that
- header declares in the translation unit'
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 175
-
- <td width="75">
- <p align="justify">17.6.4.2.1
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Local types can
- now be used to instantiate templates, but don't have
- external linkage
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove the reference to external linkage
-
- <td width="225">
- <p>
-
- we accept the proposed solution. Martin will draft an issue.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 176
-
- <td width="75">
- <p align="justify">17.6.4.3.3
-
- <td width="31">
- <p align="justify">Footnote 175
-
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Reference to namespace ::std should be
- 17.6.4.2
-
- <td width="466">
- <p align="left">Change referfence from 17.6.4.3 to 17.6.4.2
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 177
-
- <td width="75">
- <p align="justify">17.6.4.3.4
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Sentence is
- redundant as double underscores are reserved in all
- contexts by 17.6.4.3.3
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Strike the sentence
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 178
-
- <td width="75">
- <p align="justify">17.6.4.8
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The last sentence of the third bullet
- "Operations on such types can report a failure by throwing
- an exception unless otherwise specified" is redundant as
- behaviour is already undefined.
-
- <td width="466">
- <p align="left">Strike the sentence
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 179
-
- <td width="75">
- <p align="justify">17.6.4.8
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">According to the
- 4th bullet there is a problem if "if any replacement
- function or handler function or destructor operation throws
- an exception". There should be no problem throwing
- exceptions so long as they are caught within the function.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace the word 'throws' with 'propogates'
-
- <td width="225">
- <p>
-
- Agreed. Alisdair will draft an issue.<tr valign="top">
- <td width="29">
- <p>JP 22
-
- <td width="75">
- <p align="left">17.6.5.7
-
- <td width="31">
- <p align="left">4<sup>th</sup> <font size="2"
- style="font-size: 11pt">para, 1<sup>st</sup>
- line</font>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">The
- statement below describes relation among two or more
- threads using words “between threads”:<br>
- [Note: This means, for example, that implementations
- can’t use a static object for internal purposes
- without synchronization because it could cause a data race
- even in programs that do not explicitly share objects
- between threads. —end note ]
-
- <p align="left" style="margin-top: 0.04in">In
- such case, “among” is preferred instead of
- “between”.
-
- <td width="466">
- <p align="left">
- Change "between threads" to "among threads".
-
- <p align="left" style="margin-top: 0.04in">
- There are same cases in 17.6.1 paragraph 2, 17.6.5.7
- paragraph 6, 30.1 paragraph 1, 30.3.1 paragraph 1 also.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 180
-
- <td width="75">
- <p align="justify">17.6.5.10
-
- <td width="31">
- <p align="justify">1, 4
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">It should not be
- possible to strengthen the exception specification for
- virtual functions as this could break user code. Note this
- is not a problem in practice as there are no virtual
- functions with exception specifications in the current
- library, other than empty throw specifications which it is
- not possible to strengthen.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add restriction that exception
- specification of virtual functions cannot be tightened.
-
- <td width="225">
- <p>
-
- NAD, the standard already has the desired restriction.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 181
-
- <td width="75">
- <p align="justify">17.6.5.10
-
- <td width="31">
- <p align="justify">Footnote 186
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">This footnote is
- wrong. C library functions do not have any exception
- specification, but might be treated as if they had an empty
- throw specification
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Clarify that this note does not mean the
- functions are genuinely declared with the specification,
- but are treated as-if.
-
- <td width="225">
- <p>
-
- We agree that the footnote is wrong and it will be removed. Pete will handle
- as editorial.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 182
-
- <td width="75">
- <p align="justify">17.6.5.10
-
- <td width="31">
- <p align="justify">Footnote 188
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">It is very
- helpful to assume all exceptions thrown by the standard
- library derive from std::exception. The 'encouragement' of
- this note should be made normative.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Make this footnote normative
-
- <td width="225">
- <p>
-
- NAD. We cannot mandate all standard-library functions that might use some
- third-party library.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 184
-
- <td width="75">
- <p align="justify">18 -> 30
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The new
- alias-declaration syntax is generally easier to read than a
- typedef declaration. This is especially true for complex
- types like function pointers.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace all typedef declarations in the
- standard library with alias-declarations, except in the
- standard C library.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 24
-
- <td width="75">
- <p align="left">18
-
- <td width="31">
- <p align="left">2<sup>nd</sup> <font size="2"
- style="font-size: 11pt">para, Table 16</font>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">
- Subclauses are listed in Table 16 as:
-
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">"18.6 Type
- identification …"
-
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">"18.8 Initializer
- lists …"
-
- <p align="left" style=
- "text-indent: 0.06in; margin-top: 0.04in">"18.7 Exception
- handling …".
-
- <td width="466">
- <p align="left" style=
- "margin-left: 0.06in; text-indent: -0.06in; margin-bottom: 0in">
- Sort them in the increasing order<br>
- "18.6 Type identification …"
-
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">"18.7 Exception
- handling …".
-
- <p align="left" style=
- "text-indent: 0.06in; margin-top: 0.04in; margin-bottom: 0.04in">
- "18.8 Initializer lists …"
-
- <p align="left" style=
- "text-indent: 0.06in; margin-top: 0.04in"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 25
-
- <td width="75">
- <p align="left">18.1
-
- <td width="31">
- <p align="left">
- 6<sup>th</sup> <font size="2" style=
- "font-size: 11pt">para , last line, SEE ALSO</font>
-
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- max_align_t is described in 18.1, so add 3.11 Alignment as
- the reference.
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- "<u>3.11, Alignment</u><font color="#000000">" to</font>
- <font size="2" style="font-size: 11pt">SEE ALSO.</font>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>FR 32
-
- <td width="75">
- <p>18.2.1<br>
- [Numeric<br>
- limits]
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>The definition of
- numeric_limits<> as requiring a regular type is both
- conceptually wrong and operationally illogical. As we
- pointed before, this mistake needs to be corrected. For
- example, the template can be left unconstrained. In fact
- this reflects a much more general problem with
- concept_maps/axioms and their interpretations. It appears
- that the current text heavily leans toward experimental
- academic type theory.
-
- <p>
-
- <td width="466">
- <p>We suggest that a more pragmatic approach, in the spirit
- of C and C++, be taken so that calls to constrained
- function templates are interpreted as assertions on
- *values*, not necessarily semantics assertions on the
- carrier type.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>DE-16
-
- <td width="75">
- <p>18.2.1
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">DE-16 The class
- template numeric_limits should not specify the Regular
- concept requirement for its template parameter, because it
- contains functions returning NaN values for floating-point
- types; these values violate the semantics of
- EqualityComparable. See also library issue 902 in WG21
- document N2794 "C++ Standard Library Active Issues List
- (Revision R60)", available at
- http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2794.html
- .
-
- <p>
-
- <td width="466">
- <p>Specify a concept requirement with fewer constraints as
- appropriate, for example SemiRegular.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 26
-
- <td width="75">
- <p align="left">18.2.1.1
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- numeric_limits does not use concept.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- <br>
-
- <p align="left">
- template<class T> class numeric_limits<const
- T>;
-
- <p align="left">
- template<class T> class numeric_limits<volatile
- T>;
-
- <p align="left">
- template<class T> class numeric_limits<const
- volatile T>;
-
- <p align="left">
- <br>
-
- <p align="left">
- should be
-
- <p align="left">
- <br>
-
- <p align="left">
- template<<u>Regular</u> T> class
- numeric_limits<const T>;
-
- <p align="left">
- template<<u>Regular</u> T> class
- numeric_limits<volatile T>;
-
- <p align="left">
- template<<u>Regular</u> T> class
- numeric_limits<const volatile T>;
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>DE-17
-
- <td width="75">
- <p>18.2.6
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">DE-17 The class
- type_index should be removed; it provides no additional
- functionality beyond providing appropriate concept maps.
-
- <p>
-
- <td width="466">
- <p>Specify concept maps for "const type_info *" as required
- by the ordered and unordered containers and remove the
- class type_index.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 185
-
- <td width="75">
- <p align="justify">18.3.1
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">There is no
- header <stdint>, it should either be <stdint.h>
- or <cstdint>
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace <stdint> with <cstdint>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>DE-18
-
- <td width="75">
- <p>18.4
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">DE-18 The
- proposed C++ standard makes a considerable number of
- existing programs that have well-defined behavior according
- to ISO/IEC 14882:2003 have undefined behavior without a
- diagnostic hint to the programmer at all. This applies to
- the presence of threads and to pointer safety (the latter
- was introduced to support garbage collection). In order to
- avoid requiring a full code review for user code,
- facilities should be present that allow the compile-time
- detection of the advanced features of the proposed C++
- standard. It is expected that C++ implementations will
- provide a means (for example, a command-line switch) to
- turn off either or both of threads and garbage collection
- support, turning potentially undefined programs into
- well-defined ones.<br>
- <i>Note:</i> This issue is contributing significantly to
- Germany's overall “no” vote.
-
- <p>
-
- <td width="466">
- <p>Consider applying the changes proposed in WG21 document
- N2693 "Requirements on programs and backwards
- compatibility", available at
- http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2693.html
- .
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 186
-
- <td width="75">
- <p align="justify">18.4
-
- <td width="31">
- <p align="justify">Footnote 221
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">What is the
- purpose of this comment? The standard stream objects (cin,
- cerr etc.) have a peculiar lifetime that extends beyond the
- program. They may never be destroyed so will not be
- responsible for flushing buffers at the stated time.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove the footnote
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 187
-
- <td width="75">
- <p align="justify">18.4
-
- <td width="31">
- <p align="justify">9
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The term "thread
- safe" is not defined nor used in this context anywhere else
- in the standard.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Clarify the intended meaing of "thread
- safe"
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 188
-
- <td width="75">
- <p align="justify">18.4
-
- <td width="31">
- <p align="justify">12
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The function
- _Exit does not appear to be defined in this standard.
- Should it be added to the table of functions
- included-by-reference to the C standard?
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Depends on where _Exit comes from
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 189
-
- <td width="75">
- <p align="justify">18.4, 18.7
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The addition of the [[noreturn]] attribute
- to the language will be an important aid for static
- analysis tools.
-
- <td width="466">
- <p align="left">The following
- functions should be declared in C++ with the [[noreturn]]
- attribute: abort exit quick_exit terminate unexpected
- rethrow_exception throw_with_nested
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 27
-
- <td width="75">
- <p align="left">18.4, 18.9,<br>
- 18.7.2.2,<br>
- 18.7.3.1
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- There are Standard library functions that never return to
- the caller. They are explained so in the Standard but not
- declared explicitly.
-
- <td width="466">
- <p align="left">
- Consider to add the attribute [[noreturn]] to such
- functions,
-
- <p align="left">
- <br>
-
- <p align="left">
- 15.5.2 unexpected<br>
- 18.4: abort(), exit(), quick_exit,<br>
- 18.7.2.2: unexpected_handler,<br>
- 18.7.3.1: terminate_handler,
-
- <p align="left">
- 18.7.6 rethrow_nested
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">18.7.6
- throw_with_nested<br>
- 18.9: longjmp.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 190
-
- <td width="75">
- <p align="justify">18.5.1
-
- <td width="31">
- <p align="justify">various
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">It is not entirely clear how the current
- specification acts in the presence of a garbage collected
- implementation.
-
- <td width="466">
- <p align="left">All deallocation
- functions taking a pointer parameter should have a
- Precondition : ptr is a safely-derived pointer value.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 191
-
- <td width="75">
- <p align="justify">18.5.1.1
-
- <td width="31">
- <p align="justify">4
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">According to the second bullet, behaviour
- becomes undefined (for lack of a specification) if the user
- has not yet called set_new_handler.
-
- <td width="466">
- <p align="left">Rephrase the
- second bullet in terms of a new handler being installed,
- and update any definition of handler function necessary to
- be sure the term 'installed' is defined.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 192
-
- <td width="75">
- <p align="justify">18.5.1.2
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The declared
- signature is not compatible with the current requirement to
- throw std::length_error. It is too late to weaken the
- exception specification, so the only other change is to
- preserve new (improved) behaviour is to throw
- std::bad_alloc, or something derived from std::bad_alloc.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Fix 5.3.4p7 by required std::bad_alloc
- rather than std::length_error
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 193
-
- <td width="75">
- <p align="justify">18.5.2.2
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">quick_exit has
- been added as a new valid way to terminate a program in a
- well defined way
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Change 3rd bullet: call either abort(),
- exit() or quick_exit();
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 194
-
- <td width="75">
- <p align="justify">18.6
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The inclusion of
- type_index and hash<type_index> in <typeinfo>
- brings dependencies into <typeinfo> which are
- inconsistent with the definition of freestanding C++ in
- 17.6.2.4.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Move type_index and hash<type_index>
- out of <typeinfo> and into a new header,
- <typeindex>.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 28
-
- <td width="75">
- <p align="left">18.6,<br>
- 18.7,<br>
- 19.1
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left">
- Errors reported by Exception classes are of types char or
- std::string only. For example, std::exception is declared
- with char, std::string types, therefore types
- wchar_t/wstring, char16_t/u16string, or char32_t/u32string
- can not be used.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Consider other types.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 29
-
- <td width="75">
- <p align="left">18.7.6
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- throw_with_nested does not use concept.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- template<class T> void throw_with_nested(T&&
- t); // [[noreturn]]
-
- <p align="left">
- <br>
-
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
-
- <p align="left">
- <br>
-
- <p align="left">
- template<CopyConstructible T> void
- throw_with_nested(T&& t); // [[noreturn]]
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 30
-
- <td width="75">
- <p align="left">18.7.6
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">To
- handle nested exceptions strictly, error information of
- tree structure will be required though, the
- nested_exception does not support tree structure. It is
- insufficient as error handling.
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Consider nested_exception to support tree structure.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 31
-
- <td width="75">
- <p align="left">18.7.6
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">It
- is difficult to understand in which case nested_exception
- is applied.
-
- <td width="466">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Consider to add
- a sample program which rethrows exception.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 195
-
- <td width="75">
- <p align="justify">18.8
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The class
- definition of std::initializer_list contains concept-maps
- to Range which should be out of the class, and in
- <iterator_concepts> instead. Otherwise, it's not
- possible to use initializer_lists in a freestanding C++
- implementation.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Delete the two concept maps from
- std::initializer_list.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 196
-
- <td width="75">
- <p align="justify">18.8.3
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Concept maps for initializer_list to Range
- should not be in language support headers, but instead in
- iterator concepts.
-
- <td width="466">
- <p align="left">Remove section
- 18.8.3 and put it in 24.1.8.1 instead, so that the
- concept_maps from initializer_list to Range are specified
- under Range instead of under initializer lists; also, so
- that they're implemented in <iterator_concepts>
- instead of <initializer_list>.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 197
-
- <td width="75">
- <p align="justify">19
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">All the exception classes in this clause
- take a std::string argument by const reference. They should
- all be overloaded to accept std::string by rvalue rerefence
- for an efficient move as well.
-
- <td width="466">
- <p align="left">Provide a
- constructor for every exception class in clause 19
- accepting a std::string by rvalue reference, with the
- semantics that the passed string may be moved.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 32
-
- <td width="75">
- <p align="left">19.1
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left">
- Messages returned by the member function what() of standard
- exception classes seem difficult to judge.
-
- <p align="left">For
- example, following messages are returned by what() of
- std::bad_alloc of existing implementations:
-
- <p align="left">
- <br>
-
- <p align="left">
- Compiler: Message returned by what()
-
- <p align="left">
- ---------------------------------------------
-
- <p align="left">
- Borland C++ 5.6.4: no named exception thrown
-
- <p align="left">
- Visual C++ 8.0: bad allocation
-
- <p align="left">
- Code Warrior 8.0: exception
-
- <p align="left">g++
- 3.4.4: St9exception
-
- <p align="left">
- <br>
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">It is difficult
- to recognize what exception was thrown when using those
- compilers except Visual C++.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Consider to add footnote that recommends what() returns
- message easy to recognize what exception was thrown.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>US 64
-
- <td width="75">
- <p>19.3
-
- <td width="31">
- <p>1
-
- <td width="38">
- <p>Ge
-
- <td width="375">
- <p><font color="#000000">“</font> See also: ISO C
- 7.1.4, 7.2, Amendment 1 4.3.<font color="#000000">”
- It is unclear why this cross reference is here. Amendment 1
- was to C89, not C99.</font>
-
- <td width="466">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Delete this
- cross reference. If necessary, expand the main text to
- include the relevant referenced text
-
- <p>
-
- <td width="225">
- <p>
-
- The statement made in the comment was already aired prior to the last vote.
- Without further input, the committee cannot remove a feature that was voted
- into the draft. We will look at this comment in the light of N2829, which
- attempts to make scoped allocators less intrusive.<tr valign="top">
- <td width="29">
- <p align="left">US 65
-
- <td width="75">
- <p align="left">20
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">Scoped allocators and
- allocator propagation traits add a small amount of utility
- at the cost of a great deal of machinery. The machinery is
- user visible, and it extends to library components that
- don't have any obvious connection to allocators, including
- basic concepts and simple components like pair and tuple.
-
- <td width="466">
- <p align="left">
- Sketch of proposed resolution: Eliminate scoped allocators,
- replace allocator propagation traits with a simple uniform
- rule (e.g. always propagate on copy and move), remove all
- mention of allocators from components that don't explicitly
- allocate memory (e.g. pair), and adjust container
- interfaces to reflect this simplification.
-
- <p align="left">
- Components that I propose eliminating include <font size=
- "2" style="font-size: 11pt"><font color=
- "#0000FF"><span style=
- "background: #ffffce">HasAllocatorType</span></font><font color="#000080">
- <u><a href=
- "http://wiki.corp.google.com/twiki/bin/edit/Main/HasAllocatorType?topicparent=Main.CppStandardIssues">
- ?</a></u></font>, is_scoped_allocator,
- allocator_propagation_map, scoped_allocator_adaptor, and
- <font color="#0000FF"><span style=
- "background: #ffffce">ConstructibleAsElement</span></font><font color="#000080">
- <u><a href=
- "http://wiki.corp.google.com/twiki/bin/edit/Main/ConstructibleAsElement?topicparent=Main.CppStandardIssues">
- ?</a></u></font>.</font>
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 198
-
- <td width="75">
- <p align="justify">20
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The organization of clause 20 could be
- improved to better group related items, making the standard
- easier to navigate.
-
- <td width="466">
- <p align="left">20.6.7, 20.6.8,
- 20.6.9 and 20.6.10 should be grouped under a section called
- "operator wrappers" or similar. The goal of all 4
- subsections combined is to provide a functor for every
- operator in the language. 20.6.17 class template hash
- should numerically appear immediately after the operator
- wrappers, as they are functors that are used in similar
- ways 20.6.11, 20.6.12, 20.6.13, 20.6.14, 20.6.15 are
- strongly related to 20.6.3, and to an extent 20.6.2. These
- should all come under a subheading of "function adapters"
- 20.7.1, 20.7.3, 20.7.4, 20.7.5, 20.7.6, 20.7.7 and 20.7.10
- should all be grouped as subclauses under [20.7.2
- Allocators] [20.7.12 unique_ptr] should be a sub-section of
- [20.7.13 smart pointers] [20.7.13 smart pointers] is
- important enough to have a high level bullet after [20.7
- memory], suggest renumbering as [20.8 smart pointers]
- [20.7.13.7 Pointer safety] is nothing to do with smart
- pointers and should become its own subclause [20.7.14
- Pointer safety] [20.9 date and time functions] should be
- moved under [20.8 time utilities] and retitled [20.8.6 C
- Library] (as per memory management/C Library) [20.6.18
- reference_closure] is fundamentally a language support
- feature and should move to clause 18, see separate comment
- [20.6.5 reference_wrapper] should be simplified and moved
- into [2.2 utility components], see separate comment [20.6.4
- result_of] should be reorganised as a type trait - see
- separate comment Tuples and pairs are closely related so
- merge tuple and pair into the same subclause - see more
- general comment on this
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Agree that this is editorial -- forward to project editor. (effective
- duplicate of US 69)<tr valign="top">
- <td width="29">
- <p>UK<br>
- 199
-
- <td width="75">
- <p align="justify">20.1.1, 20.1.2
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The requirement
- that programs do not supply concept_maps should probably be
- users do not supply their own concept_map specializations.
- THe program will almost certainly supply concept_maps - the
- standard itself supplies a specialization for RvalueOf?
- references. Note that the term _program_ is defined in
- 3.5p1 and makes no account of the standard library being
- treated differently to user written code.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace the term 'program' with 'user'.
-
- <td width="225">
- <p>
-
- Agree change 'program' to 'user' in clauses 20.1.1 and 20.1.2<tr valign="top">
- <td width="29">
- <p>UK<br>
- 200
-
- <td width="75">
- <p align="justify">20.1.4
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">All standard library use expects Predicates
- to be CopyConstructible, and this should be recognised
- easily without reatedly stating on every use-case.
-
- <td width="466">
- <p align="left">Either require
- CopyConstructible<F> as part of Predicate, or create
- a refined concept, StdPredicate, used throughout the
- library that requires CopyConstructible as well as
- Callable. Consider making (Std)Predicate SemiRegular.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- We agree that adding constraints to predicate is a good idea. Predicate
- should be further constrained, rather than creating a new StdPredicate to
- avoid the need users to constantly choose between them. At a minimum,
- Predicate should refine MoveConstructible. However, upon review of existing
- library components, CopyConstructible or even SemiRegular might be more
- appropriate for Predicate.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 201
-
- <td width="75">
- <p align="justify">20.1.5
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The Consistency axiom for
- LessThanComparable will not compile.
-
- <td width="466">
- <p align="left">Add a requires
- clause to the Consistency axiomL requires
- HasLessEquals<T> &&
- HasGreaterEquals<T>, or split the Consistency axiom
- into two so that 'basic' consistency can be asserted
- regardless of the <=/>= requirement.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- After consultation with the submitter, we agreed that the suggestion was in
- error and there is nothing else to be done.<tr valign="top">
- <td width="29">
- <p>JP 33
-
- <td width="75">
- <p align="left">20.1.5
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- LessThanComparable and EqualityComparable don't correspond
- to NaN.
-
- <td width="466">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Apply
- concept_map to these concepts at FloatingPointType
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p>
-
- We believe that no change is necessary, but it should be reviewed by a group
- devoted to numeric issues. Not every possible state for a type must
- participate in the axioms. For example, pointers are dereferenceable even if
- some pointers (e.g. the null pointer) should not be dereferenced.<tr valign="top">
- <td width="29">
- <p>US 66
-
- <td width="75">
- <p>20.1.10
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>Application of the "Regular" concept to floating-point
- types appears to be controversial (see long discussion on
- std-lib reflector).
-
- <td width="466">
- <p>State that the “Regular” concept does not
- apply to floating-point types.
-
- <td width="225">
- <p>
-
- Recommend that we handle the same as JP 33.<tr valign="top">
- <td width="29">
- <p>JP 34
-
- <td width="75">
- <p align="left">20.2
-
- <td width="31">
- <p align="left">
- 1<sup>st</sup> <font size="2" style=
- "font-size: 11pt">para, 4<sup>th</sup> line</font>
-
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- Though N2672 pointed at adding
- "#include<initializer_list>", it isn't reflected.
-
- <td width="466">
- <p align="left">add
- followings
-
- <p align="left" style="margin-top: 0.04in">
- #include <initializer_list> // for concept_map
-
- <td width="225">
- <p>
-
- Agree that the omission of <code>#include
- <initializer_list></initializer_list>
- </code>was not agreed to in a vote and that the editor should reinstate it.
- There is some disagreement as to whether it actually <em>should</em> be
- there. Some believed it did not belong because we do not guarantee that one
- header includes another anywhere else in the standard. However, the paper
- that was voted in explicitly did make that guarantee. Removing that
- guarantee is beyond the scope of this review.<tr valign="top">
- <td width="29">
- <p>US 67
-
- <td width="75">
- <p>20.2.1
-
- <td width="31">
- <p>¶ 5 first sent.
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>Some connective words are missing.
-
- <td width="466">
- <p>Insert “corresponding to” before “an
- lvalue reference type.”
-
- <td width="225">
- <p>
-
- Yes. Forward to project editor.<tr valign="top">
- <td width="29">
- <p>JP 35
-
- <td width="75">
- <p align="left">20.2.3
-
- <td width="31">
- <p align="left">
- 6<sup>th</sup> <font size="2" style=
- "font-size: 11pt">para, 1<sup>st</sup> line</font>
-
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">
- Typo,
-
- <p align="left">"stdforward" should be
- "std::forward"
-
- <td width="466">
- <p align="left">Correct typo.
-
- <td width="225">
- <p>
-
- Yes. Forward to project editor.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 202
-
- <td width="75">
- <p align="justify">20.2.4
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The references
- to pair in the tuple-like access to pair functions qualify
- pair with std::pair even though they are in a namespace std
- block.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove the std:: qualification from these
- references to pair.
-
- <td width="225">
- <p>
-
- Yes. Forward to project editor.<tr valign="top">
- <td width="29">
- <p>US 68
-
- <td width="75">
- <p>20.2.12
-
- <td width="31">
- <p>IntegralLike
-
- <td width="38">
- <p>te/ed
-
- <td width="375">
- <p>The code defining the context is syntactically
- incorrect.
-
- <td width="466">
- <p>Insert a comma in two places: at the end of the third
- line of refinements, and at the end of the fourth line of
- refinements.
-
- <td width="225">
- <p>
-
- Editorial. The correct section is 20.1.12, not 20.2.12. Forward to project
- editor.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 203
-
- <td width="75">
- <p align="justify">20.3.2
-
- <td width="31">
- <p align="justify">1-4
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The ratio_xyz
- types have a misplaced '}'. For example: template <class
- R1, class R2> struct ratio_add { typedef see below}
- type; ;
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Move the '}' to after the typedef: template
- <class R1, class R2> struct ratio_add { typedef see
- below type; };
-
- <td width="225">
- <p>
-
- Yes. Forward to project editor.<tr valign="top">
- <td width="29">
- <p>JP 36
-
- <td width="75">
- <p align="left">20.4.2.1
-
- <td width="31">
- <p align="left">
- 19<sup>th</sup> <font size="2" style=
- "font-size: 11pt">para, 6<sup>th</sup> line</font>
-
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">
- Typo.
-
- <p align="left" style="margin-top: 0.04in">"it
- it" should be "it is"
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Correct typo.
-
- <td width="225">
- <p>
-
- Yes. Forward to project editor.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 204
-
- <td width="75">
- <p align="justify">20.5
-
- <td width="31">
- <p align="justify">Table 41
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">It is not
- possible to create a variant union based on a parameter
- pack expansion, e.g. to implement a classic discriminated
- union template.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Restore aligned_union template that was
- removed by LWG issue 856.
-
- <td width="225">
- <p>
-
- Agree that aligned_union is not completely redundant. We are investigating
- whether the need for aligned_union is compelling enough to reinstate.<tr valign="top">
- <td width="29">
- <p>US 69
-
- <td width="75">
- <p>20.5
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>This section, dealing with tuple<>, should be in
- the same section as the similar utility pair<>.
-
- <td width="466">
- <p>Restructure Clause 20 so as to bring these similar
- components together.
-
- <td width="225">
- <p>
-
- Editorial (effective duplicate of UK 198). Forward to project editor.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 205
-
- <td width="75">
- <p align="justify">20.5.3
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">
- integral_constant objects should be usable in
- integral-constant-expressions. The addition to the language
- of literal types and the enhanced rules for constant
- expressions make this possible.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add a constexpr conversion operator to
- class tempalate integral_constant: constexpr operator
- value_type() { return value; }
-
- <td width="225">
- <p>
-
- Agree: Add a constexpr conversion operator to class template
- integral_constant: <code>constexpr operator value_type() { return value; }</code><tr valign="top">
- <td width="29">
- <p>UK<br>
- 206
-
- <td width="75">
- <p align="justify">20.5.5
-
- <td width="31">
- <p align="justify">para 4
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Currently the
- std says: "In order to instantiate the template
- is_convertible<From, To>, the following code shall be
- well formed:" But the code shown is the requirement for the
- result of is_convertible to be a true_type, not a
- precondition on whether the template can be instantiated.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Change: "In order to instantiate the
- template is_convertible<From, To>, the following code
- shall be well formed:" To: "The template
- is_convertible<From, To> inherits either directly or
- indirectly from true_type if the following code is well
- formed:"
-
- <td width="225">
- <p>
-
- Agree with the proposed resolution: Section 20.5.5, Change: "In order to
- instantiate the template is_convertible<From, To>, the following code shall
- be well formed:" To: "The template is_convertible<From, To> inherits either
- directly or indirectly from true_type if the following code is well formed:"<tr valign="top">
- <td width="29">
- <p>UK<br>
- 207
-
- <td width="75">
- <p align="justify">20.5.6.1
-
- <td width="31">
- <p align="justify">Table 36
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">suffix "::type" is missing from the some of
- the examples.
-
- <td width="466">
- <p align="left">Change:
- Example:remove_const<const volatile int>::type
- evaluates to volatile int, whereas remove_const<const
- int*> is const int*. —end example To:
- Example:remove_const<const volatile int>::type
- evaluates to volatile int, whereas remove_const<const
- int*>::type is const int*. —end example And
- change: Example:remove_volatile<const volatile
- int>::type evaluates to const int, whereas
- remove_volatile<volatile int*> is volatile int*.
- —end example To: Example:remove_volatile<const
- volatile int>::type evaluates to const int, whereas
- remove_volatile<volatile int*>::type is volatile
- int*. —end example And change:
- Example:remove_cv<const volatile int>::type evaluates
- to int, whereas remove_cv<const volatile int*> is
- const volatile int*. —end example To:
- Example:remove_cv<const volatile int>::type evaluates
- to int, whereas remove_cv<const volatile int*>::type
- is const volatile int*. —end example
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- We tend to agree. Forward to project editor. Also recommend that the word
- "is" be replaced with "evaluates to" in the same text.<tr valign="top">
- <td width="29">
- <p>JP 37
-
- <td width="75">
- <p align="left">20.5.7
-
- <td width="31">
- <p align="left">Table 41
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">
- Typo.
-
- <p align="left" style=
- "text-indent: 0.19in; margin-bottom: 0in">There isn't a
- period at the end of enable_if's comments.
-
- <p align="left">
- <br>
-
- <p align="left">If
- B is true, the member typedef type shall equal T;
- otherwise, there shall be no member typedef type
-
- <p align="left">
- <br>
-
- <p align="left">
- should be
-
- <p align="left">
- <br>
-
- <p align="left">If
- B is true, the member typedef type shall equal T;
- otherwise, there shall be no member typedef type.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- ”.”
-
- <td width="225">
- <p>
-
- Agree. Forward to project editor.<tr valign="top">
- <td width="29">
- <p>US 70
-
- <td width="75">
- <p>20.6
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>Specifications now expressed via narrative text are more
- accurately and clearly expressed via executable code.
-
- <td width="466">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Wherever
- concepts are available that directly match this
- section’s type traits, express the traits in terms of
- the concepts instead of via narrative text. Where the type
- traits do not quite match the corresponding concepts, bring
- the two into alignment so as to avoid two nearly-identical
- notions.
-
- <p>
-
- <td width="225">
- <p>
-
- (The correct reference is section 20.5, not 20.6) We think that this is a
- good idea, but it requires a lot of work. If someone submits a paper
- proposing specific changes, we would be happy to review it at the next
- meeting.<tr valign="top">
- <td width="29">
- <p>US 71
-
- <td width="75">
- <p>20.6.7
-
- <td width="31">
- <p>Table 51, last row, column 3
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>The grammar is incorrect.
-
- <td width="466">
- <p>Change “conversion are” to “conversion
- is”.
-
- <td width="225">
- <p>
-
- (The correct reference is section 20.5.7, table 41, last row). Agree:
- Forward to project editor. There are several ways to fix the grammar.<tr valign="top">
- <td width="29">
- <p>JP 38
-
- <td width="75">
- <p align="left">20.6.12.1.3
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style=
- "margin-left: 0.19in; text-indent: -0.19in; margin-bottom: 0in">
- add the move requirement for bind's return type.<br>
- <br>
-
- <p align="left" style=
- "margin-left: 0.19in; text-indent: -0.19in; margin-bottom: 0in">
- For example, assume following th1 and th2,
-
- <p align="left">
- <br>
- void f(vector<int> v) { }<br>
- <br>
- vector<int> v{ ... };<br>
- thread th1([v]{ f(v); });<br>
- thread th2(bind(f, v));<br>
- <br>
- When function object are set to thread, v is moved to th1's
- lambda expression in a Move Constructor of lambda
- expression becuase th1's lambda expression has a Move
- Constructor. But bind of th2's return type doesn't have the
- requirement of Move, so it may not moved but copied.
-
- <p align="left">Add
- the requirement of move to get rid of this useless copy.
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">And also, add
- the MoveConstructible as well as CopyConstructible.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left">Add
- the following requirements.<br>
- "<font color="#000000">it has a public move constructor
- that performs a member-wise move."</font>
-
- <p align="left" style="margin-top: 0.04in">Add
- the MoveConstructible.
-
- <td width="225">
- <p>
-
- We were not clear about what the submitter really intended. Requiring that
- the result of bind be <span class="twikiNewLink">MoveConstructible?</span>
- and/or <span class="twikiNewLink">CopyConstructible?</span>
- might be a start, but we would like to communicate with the submitter.
- [NOTE: We would like to see a clarification of the wording for Returnable<t>
- that makes it clear that move-only types can be Returnable.] </t>
-
- <tr valign="top">
- <td width="29">
- <p>JP 39
-
- <td width="75">
- <p align="left">20.6.16.2
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- There are no requires corresponding to F of std::function.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- template<class F, Allocator A>
- function(allocator_arg_t, const A&, F);
-
- <p align="left">
- template<class F, Allocator A>
- function(allocator_arg_t, const A&, F&&);
-
- <p align="left">
- <br>
-
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
-
- <p align="left">
- <br>
-
- <p align="left">
- template<class F, Allocator A>
-
- <p align="left">
- requires CopyConstructible<F> &&
- Callable<F, ArgTypes...>
-
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
-
- <p align="left">
- function(allocator_arg_t, const A&, F);
-
- <p align="left">
- template<class F, Allocator A>
-
- <p align="left">
- requires CopyConstructible<F> &&
- Callable<F, ArgTypes...>
-
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
-
- <p align="left">
- function(allocator_arg_t, const A&, F&&);
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Agree with one correction: <span class="twikiNewLink">CopyConstructible?</span>
- should be <span class="twikiNewLink">ConstructibleWithAllocator?</span>
- . Pablo to supply wording. Also check with Howard that omission was not
- deliberate.<tr valign="top">
- <td width="29">
- <p>JP 40
-
- <td width="75">
- <p align="left">20.6.16.2
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- Thougn it's "Allocator Aloc" at other places, it's
- "Allocator A" only std::function constructor template
- parameter.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- template<class F, Allocator A>
- function(allocator_arg_t, const A&, F);
-
- <p align="left">
- template<class F, Allocator A>
- function(allocator_arg_t, const A&, F&&);
-
- <p align="left">
- <br>
-
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
-
- <p align="left">
- <br>
-
- <p align="left">
- template<class F, Allocator <u>Alloc</u>>
- function(allocator_arg_t, const <u>Alloc</u> &, F);
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">
- template<class F, Allocator <u>Alloc</u>>
- function(allocator_arg_t, const <u>Alloc</u> &,
- F&&);
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p>
-
- Agree, though minor. Forward to project editor (who may disregard).<tr valign="top">
- <td width="29">
- <p>JP 41
-
- <td width="75">
- <p align="left">20.6.16.2
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- There are no requires corresponding to R and Args of
- UsesAllocator.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- template <class R, class... Args>
-
- <p align="left">
- concept_map UsesAllocator<function<R(Args...)>,
- Alloc> {
-
- <p align="left">
- typedef Alloc allocator_type;
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
-
- <p align="left">
- <br>
-
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... Args>
-
- <p align="left">
- concept_map UsesAllocator<function<R(Args...)>,
- Alloc> {
-
- <p align="left">
- typedef Alloc allocator_type;
-
- <p align="left" style="margin-top: 0.04in">}
-
- <td width="225">
- <p>
-
- This change would be redundant because function<> is already sufficiently
- constrained. No actions necessary.<tr valign="top">
- <td width="29">
- <p>JP 42
-
- <td width="75">
- <p align="left">20.6.16.2
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">The requires
- are wrong.
-
- <p align="left" style="margin-top: 0.04in">R
- require Returnable, and ArgTypes requires CopyConstructible
- by a definition of function, then it's a mistake to
- designate followings by MoveConstructible.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- <br>
-
- <p align="left">
- template <MoveConstructible R, MoveConstructible...
- ArgTypes>
-
- <p align="left">
- bool operator==(const function<R(ArgTypes...)>&,
- nullptr_t);
-
- <p align="left">
- template <MoveConstructible R, MoveConstructible...
- ArgTypes>
-
- <p align="left">
- bool operator==(nullptr_t, const
- function<R(ArgTypes...)>&);
-
- <p align="left">
- template <MoveConstructible R, MoveConstructible...
- ArgTypes>
-
- <p align="left">
- bool operator!=(const function<R(ArgTypes...)>&,
- nullptr_t);
-
- <p align="left">
- template <MoveConstructible R, MoveConstructible...
- ArgTypes>
-
- <p align="left">
- bool operator!=(nullptr_t, const
- function<R(ArgTypes...)>&);
-
- <p align="left">
- template <MoveConstructible R, MoveConstructible...
- ArgTypes>
-
- <p align="left">
- void swap(function<R(ArgTypes...)>&,
- function<R(ArgTypes...)>&);
-
- <p align="left">
- <br>
-
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
-
- <p align="left">
- <br>
-
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... ArgTypes>
-
- <p align="left">
- bool operator==(const function<R(ArgTypes...)>&,
- nullptr_t);
-
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... ArgTypes>
-
- <p align="left">
- bool operator==(nullptr_t, const
- function<R(ArgTypes...)>&);
-
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... ArgTypes>
-
- <p align="left">
- bool operator!=(const function<R(ArgTypes...)>&,
- nullptr_t);
-
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... ArgTypes>
-
- <p align="left">
- bool operator!=(nullptr_t, const
- function<R(ArgTypes...)>&);
-
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... ArgTypes>
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">void
- swap(function<R(ArgTypes...)>&,
- function<R(ArgTypes...)>&);
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p>
-
- As with JP 41, these constraints are redundant given that function<> is
- already constrained. So we recommend changing each occurence of "MoveConstructible"
- to "class". Note: this issue is also present in func.wrap.func.nullptr.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 208
-
- <td width="75">
- <p align="justify">20.6.17
-
- <td width="31">
- <p align="justify">1
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">std::hash should
- be implemented for much more of the standard library. In
- particular for pair, tuple and all the standard containers.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">.
-
- <td width="225">
- <p>
-
- Consensus is that this is an expansion of the scope of C++0X and so we
- recommend no action.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 209
-
- <td width="75">
- <p align="justify">20.7
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Smart pointers cannot be used in
- constrained templates
-
- <td width="466">
- <p align="left">Provide
- constraints for smart pointers
-
- <p align="left"><br>
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- We look forward to a paper on this topic. We recommend no action until a
- paper is available. We understand that a paper is forthcoming.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 213
-
- <td width="75">
- <p align="justify">20.7.6
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">std::allocator
- should be constrained to simplify its use on constrained
- contexts. This library component models allocation from
- free store via the new operator so choose constraints to
- match. The Allocator concept allows for a wider variety of
- allocators that users may choose to supply if their
- allocation model does not require operator new, without
- impacting the requirements of this template.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">The primary allocator template should be
- constrained to require ObjectType<T> and
- FreeStoreAllocatable<T>. Further operations to be
- constrained as required.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 214
-
- <td width="75">
- <p align="justify">20.7.8
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">
- raw_storage_iterator needs constraining as an iterator
- adaptor to be safely used in constrained templates
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Constrain the raw_storage_iterator template
-
- <td width="225">
- <p>
-
- We look forward to a paper on this topic. We recommend no action until a
- paper is available.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 210
-
- <td width="75">
- <p align="justify">20.7.11
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Specialized algorithms for memory
- managenment need requirements to be easily usable in
- constrained templates
-
- <td width="466">
- <p align="left">Provide
- constraints for all algorithms in 20.7.11
-
- <p align="left"><br>
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- We look forward to a paper on this topic. We recommend no action until a
- paper is available.<tr valign="top">
- <td width="29">
- <p>DE-20
-
- <td width="75">
- <p>20.7.12
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>DE-20 The section heading and the first sentence use the
- term "template function", which is undefined.
-
- <td width="466">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Replace
- "template function" by "function template".
-
- <p>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 72
-
- <td width="75">
- <p align="left">20.7.12
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">
- bind should support move-only functors and bound arguments.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>DE-21
-
- <td width="75">
- <p>20.7.12.1.3
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>DE-21 The specification for bind claims twice that "the
- values and types for the bound arguments v1, v2, ..., vN
- are determined as specified below". No such specification
- appears to exist.
-
- <td width="466">
- <p>Add the missing specification in the same section, or
- add a cross-reference indicating the section where the
- specification appears.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 211
-
- <td width="75">
- <p align="justify">20.7.12.2.3
-
- <td width="31">
- <p align="justify">11
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The nullptr_t
- type was introduced to resolve the null pointer literal
- problem. It should be used for the assignemnt operator, as
- with the constructor and elsewhere through the library.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Change signature here and in the synopsis
- to: unique_ptr& operator=(nullptr_t); Strike the
- sentance an note before the Effects clause.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 212
-
- <td width="75">
- <p align="justify">20.7.13.7
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The
- pointer-safety API is nothing to do with smart pointers, so
- does not belong in 20.7.13. In fact it is a set of language
- support features are really belongs in clause 18, with the
- contents declared in a header that deals with
- language-support of memory management.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Move this specification to 18.5. Move the
- declarations into the header <new>.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>DE-22
-
- <td width="75">
- <p>20.7.16.2
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>DE-22 The conditions for deriving from
- std::unary_function and std::binary_function are unclear:
- The condition would also be satisfied if ArgTypes were
- std::vector<T1>, because it (arguably) "contains" T1.
-
- <td width="466">
- <p>Consider stating the conditions in normative prose
- instead of in comments in the class definition. Use
- "consists of" instead of "contains". Consider using "if and
- only if" instead of "iff".
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 73
-
- <td width="75">
- <p align="left">20.7.18
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">The
- std::reference_closure template is redundant with
- std::function and should be removed.
-
- <p align="left"><br>
-
- <p align="left">
- std::reference_closure is a premature optimization that
- provides a limited subset of the functionality of
- std::function intended to improve performance in a narrow
- use case. However, the “parallel application
- performance” benchmark used to motivate the inclusion
- of std::reference_closure was flawed in several ways:
-
- <ol start="3">
- <li>
- <p align="left">it failed to
- enable a common optimization in std::function
- (implemented by all vendors), exacting a large and
- unrealistic penalty for copying std::function
- instances, and
-
- <li>
- <p align="left">it failed to
- account for parallel scheduler overhead or
- realistically-sized work units, both of which would
- dominate the costs measured by the benchmark in any
- realistic application.
- </ol>
-
- <p align="left" style="margin-left: 0.25in"><br>
-
- <td width="466">
- <p align="left">Remove 20.7.18
- [func.referenceclosure].
-
- <p align="left"><br>
-
- <p align="left">Remove 5.1.1 paragraph 12.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 74
-
- <td width="75">
- <p align="left">20.8
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">Scoped
- allocators represent a poor trade-off for standardization,
- since (1) scoped-allocator--aware containers can be
- implemented outside the C++ standard library but used with
- its algorithms, (2) scoped allocators only benefit a tiny
- proportion of the C++ community (since few C++ programmers
- even use today’s allocators), and (3) all C++ users,
- especially the vast majority of the C++ community that
- won’t ever use scoped allocators are forced to cope
- with the interface complexity introduced by scoped
- allocators. In essence, the larger community will suffer to
- support a very small subset of the community who can
- already implement their own data structures outside of the
- standard library. Therefore, scoped allocators should be
- removed from the working paper.
-
- <p align="left">Some evidence of
- the complexity introduced by scoped allocators:
-
- <p align="left">20.3.3, 20.5:
- large increase in the number of pair and tuple constructors
-
- <p align="left">23: confusing
- “AllocatableElement” requirements throughout.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove support
- for scoped allocators from the working paper. This includes
- at least the following changes:
-
- <p align="left"><br>
-
- <p align="left">Remove 20.8.3
- [allocator.element.concepts]
-
- <p align="left"><br>
-
- <p align="left">Remove 20.8.7
- [allocator.adaptor]
-
- <p align="left"><br>
-
- <p align="left">Remove 20.8.10
- [construct.element]
-
- <p align="left"><br>
-
- <p align="left">In Clause 23:
- replace requirements naming the AllocatableElement concept
- with requirements naming CopyConstructible,
- MoveConstructible, DefaultConstructible, or Constructible,
- as appropriate.
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>US 74
-
- <td width="75">
- <p>20.8.2.2
-
- <td width="31">
- <p>(a) synopsis (b) after ¶ 14
-
- <td width="38">
- <p>te/ed
-
- <td width="375">
- <p>A concept name is twice misspelled.
-
- <td width="466">
- <p>Change “Hasconstructor” to
- “HasConstructor” (twice).
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>US 75
-
- <td width="75">
- <p>20.8.2.2
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>Allocator concepts are incomplete
-
- <td width="466">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">See paper:
- http://www.halpernwightsoftware.com/WG21/n2810_allocator_defects.pdf
-
- <p>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 43
-
- <td width="75">
- <p align="left">20.8.3
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">
- Typo.
-
- <p align="left" style="margin-top: 0.04in">
- "alloc" should be "Alloc"
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- <br>
-
- <p align="left">
- auto concept UsesAllocator<typename T, typename
- Alloc> {
-
- <p align="left">
- requires Allocator<alloc>;
-
- <p align="left">
- typename allocator_type = T::allocator_type;
-
- <p align="left">
-
-
- <p align="left">
- should be
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">
-
- <p align="left">
- auto concept UsesAllocator<typename T, typename
- Alloc> {
-
- <p align="left">
- requires Allocator<<u>Alloc</u>>;
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">typename
- allocator_type = T::allocator_type;
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 215
-
- <td width="75">
- <p align="justify">20.8.3.3
-
- <td width="31">
- <p align="justify">6,8
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Extra pair of
- {}, presumably some formatting code gone awry :
- duration& operator-{-}();
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove the {} or fix formatting
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 77
-
- <td width="75">
- <p align="left">20.8.4
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">
- Allocator-specific move and copy behavior for containers
- (N2525) complicates a little-used and already-complicated
- portion of the standard library (allocators), and breaks
- the conceptual model of move-constructor and
- move-assignment operations on standard containers being
- efficient operations. The extensions for allocator-specific
- move and copy behavior should be removed from the working
- paper.
-
- <p align="left">With the
- introduction of rvalue references, we are teaching
- programmers that moving from a standard container (e.g., a
- vector<string>) is an efficient, constant-time
- operation. The introduction of N2525 removed that
- guarantee; depending on the behavior of four different
- traits (20.8.4), the complexity of copy and move operations
- can be constant or linear time. This level of customization
- greatly increases the complexity of standard containers,
- and benefits only a tiny fraction of the C++ community.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove 20.8.4.
-
- <p align="left"><br>
-
- <p align="left">Remove 20.8.5.
-
- <p align="left"><br>
-
- <p align="left">Remove all references to the facilities in
- 20.8.4 and 20.8.5 from clause 23.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 78
-
- <td width="75">
- <p align="left">20.8.12,<br>
- 20.8.13.2
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">There is presently no way to
- convert directly from a <font size="2" style=
- "font-size: 11pt"><code>shared_ptr</code> to a
- <code>unique_ptr</code>.</font>
-
- <td width="466">
- <p align="left">Add
- an interface that performs the conversion. See the
- attached, Issues with the C++ Standard" paper under Chapter
- 20, "Conversion from <font size="2" style=
- "font-size: 11pt"><code>shared_ptr</code> to
- <code>unique_ptr".</code></font>
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 79
-
- <td width="75">
- <p align="left">20.8.12.2.1
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">
- [unique.ptr.single.ctor]/5 no longer requires for D not to
- be a pointer type. This restriction needs to be put
- back in. Otherwise we have a run time failure that
- could have been caught at compile time:
-
- <p align="left">
- <br>
-
- <p align="left">
- unique_ptr<int, void(*)(void*)>
- p(malloc(sizeof(int))); // should not compile
-
- <p align="left">
- <br>
-
- <p align="left">
- unique_ptr<int, void(*)(void*)>
- p(malloc(sizeof(int)), free); // ok
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 44
-
- <td width="75">
- <p align="left">20.8.13.6
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left">The
- 1st parameter p and 2nd parameter v is now
- shared_ptr<T> *.
-
- <p align="left" style="margin-top: 0.04in">It
- should be shared_ptr<T>&, or if these are
- shared_ptr<T>* then add the "p shall not be a null
- pointer" at the requires.
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Change shared_ptr<T>& or add the "p shall not be
- a null pionter" at the requires.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 45
-
- <td width="75">
- <p align="left">20.9
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left">
- Rep, Period, Clock and Duration don't correspond to
- concept.
-
- <p align="left">
- template <class Rep, class Period = ratio<1>>
- class duration;
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">template
- <class Clock, class Duration = typename
- Clock::duration> class time_point;
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Make concept for Rep, Period, Clock and Duration, and fix
- 20.9 and wait_until and wait_for's template parameter at
- 30.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>US 80
-
- <td width="75">
- <p>20.9.2.1
-
- <td width="31">
- <p>Heading
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>The section heading does not describe the contents.
-
- <td width="466">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Change the
- heading “<span lang=
- "en-US">is_floating_point</span>” to
- “<span lang=
- "en-US">treat_as_floating_point</span>”. Optionally
- adjust the section’s label similarly.
-
- <p>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 81
-
- <td width="75">
- <p align="left">20.9.3
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">
- chrono::duration is missing the modulous operator for both
- member and non-member arithmetic. This operator is useful
- for finding the position of a duration within a bounded
- time frame. Having it be built in to duration is safer than
- requiring the client to extract and operate directly on the
- duration’s representation as the latter will not
- enforce the correct units of the operation.
-
- <p align="left">
- <br>
-
- <p align="left">Ex:
-
- <p align="left">
- <br>
-
- <p align="left">
- milliseconds ms(...);
-
- <p align="left">
- microseconds us(...);
-
- <p align="left">
- <br>
-
- <p align="left">ms
- % us; // microseconds
-
- <p align="left">us
- % ms; // microseconds
-
- <p align="left">ms
- % 5; // milliseconds
-
- <p align="left">5 %
- ms; // does not compile
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add:
-
- <p align="left"><br>
-
- <p align="left">
- template <class Rep, class Period = ratio<1>>
-
- <p align="left">
- class duration {
-
- <p align="left">
- public:
-
- <p align="left">...
-
- <p align="left">duration&
- operator%(const rep&);
-
- <p align="left">duration&
- operator%(const duration&);
-
- <p align="left">..
-
- <p align="left">};
-
- <p align="left"><br>
-
- <p align="left">template
- <class Rep1, class Period,
-
- <p align="left">class Rep2>
-
- <p align="left">
- duration<typename common_type<
-
- <p align="left">Rep1,
- Rep2>::type, Period>
-
- <p align="left">operator%(const
- duration<Rep1, Period>& d, const Rep2& s);
-
- <p align="left"><br>
-
- <p align="left">template
- <class Rep1, class Period1,
-
- <p align="left">class Rep2,
- class Period2>
-
- <p align="left">typename
- common_type<duration<Rep1, Period1>,
- duration<Rep2, Period2>>::type
-
- <p align="left">operator%(const
- duration<Rep1, Period1>& lhs, const
- duration<Rep2, Period2>& rhs);
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>US 82
-
- <td width="75">
- <p>20.9.5.3
-
- <td width="31">
- <p>after ¶ 1
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>The code synopsis has a minor alignment error.
-
- <td width="466">
- <p>Align “rep” with the other symbols defined
- in this synopsis.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 216
-
- <td width="75">
- <p align="justify">21
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">All the containers use concepts for their
- iterator usage, exect for basic_string. This needs fixing.
-
- <td width="466">
- <p align="left">Use concepts for iterator template
- parameters throughout the chapter.
-
- <td width="225">
- <p>
-
- NB comments to be handled by Dave Abrahams and Howard Hinnant with advice
- from PJP: UK216 (which duplicates) JP46, JP48. JP46 supplies extensive
- proposed wording; start there.<tr valign="top">
- <td width="29">
- <p>JP 46
-
- <td width="75">
- <p align="left">21.2, 21.3
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">The
- basic_string does not use concept.
-
- <td width="466">
- <p align="left">The
- "class Alloc" is changed to "Allocator Alloc".
-
- <p align="left">The
- "class InputIterator" is changed to "InputIterator Iter".
-
- <p align="left">
- <br>
-
- <p align="left">//
- 21.3, basic_string:
-
- <p align="left">
- template<class charT, class traits =
- char_traits<charT>,
-
- <p align="left">
- <u>Allocator</u> Alloc = allocator<charT> >
-
- <p align="left">
- class basic_string;
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>
-
- <p align="left">
- operator+(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
-
- <p align="left">
- operator+(basic_string<charT,traits,<u>Alloc</u>>&&
- lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
-
- <p align="left">
- operator+(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
-
- <p align="left">
- operator+(basic_string<charT,traits,<u>Alloc</u>>&&
- lhs,
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>
-
- <p align="left">
- operator+(const charT* lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
-
- <p align="left">
- operator+(const charT* lhs,
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>
-
- <p align="left">
- operator+(charT lhs, const
- basic_string<charT,traits,<u>Alloc</u>>& rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
-
- <p align="left">
- operator+(charT lhs,
- basic_string<charT,traits,<u>Alloc</u>>&&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>
-
- <p align="left">
- operator+(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const charT* rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
-
- <p align="left">
- operator+(basic_string<charT,traits,<u>Alloc</u>>&&
- lhs,
-
- <p align="left">
- const charT* rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>
-
- <p align="left">
- operator+(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
- charT rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
-
- <p align="left">
- operator+(basic_string<charT,traits,<u>Alloc</u>>&&
- lhs, charT rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator==(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator==(const charT* lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator==(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const charT* rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator!=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator!=(const charT* lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator!=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const charT* rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator< (const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator< (const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const charT* rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator< (const charT* lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator> (const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator> (const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const charT* rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator> (const charT* lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator<=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator<=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const charT* rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator<=(const charT* lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator>=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator>=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
-
- <p align="left">
- const charT* rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- bool operator>=(const charT* lhs,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
-
- <p align="left">
-
-
- <p align="left">//
- 21.3.8.8: swap
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- void swap(basic_string<charT,traits,Alloc>& lhs,
-
- <p align="left">
- basic_string<charT,traits,Alloc>& rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- void swap(basic_string<charT,traits,Alloc>&&
- lhs,
-
- <p align="left">
- basic_string<charT,traits,Alloc>& rhs);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- void swap(basic_string<charT,traits,Alloc>& lhs,
-
- <p align="left">
- basic_string<charT,traits,Alloc>&& rhs);
-
- <p align="left">
-
-
- <p align="left">//
- 21.3.8.9: inserters and extractors
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_istream<charT,traits>&
-
- <p align="left">
- operator>>(basic_istream<charT,traits>&&
- is,
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>& str);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_ostream<charT, traits>&
-
- <p align="left">
- operator<<(basic_ostream<charT,
- traits>&& os,
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- str);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_istream<charT,traits>&
-
- <p align="left">
- getline(basic_istream<charT,traits>&& is,
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>& str,
-
- <p align="left">
- charT delim);
-
- <p align="left">
-
-
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
-
- <p align="left">
- basic_istream<charT,traits>&
-
- <p align="left">
- getline(basic_istream<charT,traits>&& is,
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>& str);
-
- <p align="left">
-
-
- <p align="left">
- <br>
-
- <p align="left">//
- 21.3 Class template basic_string
-
- <p align="left">
- namespace std {
-
- <p align="left">
- template<class charT, class traits =
- char_traits<charT>,
-
- <p align="left">
- <u>Allocator Alloc</u> = allocator<charT> >
-
- <p align="left">
- class basic_string {
-
- <p align="left">
- public:
-
- <p align="left">//
- types:
-
- <p align="left">
- typedef traits traits_type;
-
- <p align="left">
- typedef typename traits::char_type value_type;
-
- <p align="left">
- typedef <u>Alloc</u> allocator_type;
-
- <p align="left">
- typedef typename <u>Alloc</u>::size_type size_type;
-
- <p align="left">
- typedef typename <u>Alloc</u>::difference_type
- difference_type;
-
- <p align="left">
- typedef typename <u>Alloc</u>::reference reference;
-
- <p align="left">
- typedef typename <u>Alloc</u>::const_reference
- const_reference;
-
- <p align="left">
- typedef typename <u>Alloc</u>::pointer pointer;
-
- <p align="left">
- typedef typename <u>Alloc</u>::const_pointer const_pointer;
-
- <p align="left">
- typedef implementation-defined iterator; // See 23.1
-
- <p align="left">
- typedef implementation-defined const_iterator; // See 23.1
-
- <p align="left">
- typedef std::reverse_iterator<iterator>
- reverse_iterator;
-
- <p align="left">
- typedef std::reverse_iterator<const_iterator>
- const_reverse_iterator;
-
- <p align="left">
- static const size_type npos = -1;
-
- <p align="left">
-
-
- <p align="left">//
- 21.3.2 construct/copy/destroy:
-
- <p align="left">
- explicit basic_string(const <u>Alloc</u>& a =
- <u>Alloc</u>());
-
- <p align="left">
- basic_string(const basic_string& str);
-
- <p align="left">
- basic_string(basic_string&& str);
-
- <p align="left">
- basic_string(const basic_string& str, size_type pos,
- size_type n = npos,
-
- <p align="left">
- const <u>Alloc</u>& a = <u>Alloc</u>());
-
- <p align="left">
- basic_string(const charT* s,
-
- <p align="left">
- size_type n, const <u>Alloc</u>& a = <u>Alloc</u>());
-
- <p align="left">
- basic_string(const charT* s, const <u>Alloc</u>& a =
- <u>Alloc</u>());
-
- <p align="left">
- basic_string(size_type n, charT c, const <u>Alloc</u>&
- a = <u>Alloc</u>());
-
- <p align="left">
- template<<u>InputIterator</u> <u>Iter</u>>
-
- <p align="left">
- basic_string(<u>Iter</u> begin, <u>Iter</u> end,
-
- <p align="left">
- const <u>Alloc</u>& a = <u>Alloc</u>());
-
- <p align="left">
- basic_string(initializer_list<charT>, const
- <u>Alloc</u>& = <u>Alloc</u>());
-
- <p align="left">
- basic_string(const basic_string&, const
- <u>Alloc</u>&);
-
- <p align="left">
- basic_string(basic_string&&, const
- <u>Alloc</u>&);
-
- <p align="left">
- ~basic_string();
-
- <p align="left">
- basic_string& operator=(const basic_string& str);
-
- <p align="left">
- basic_string& operator=(basic_string&& str);
-
- <p align="left">
- basic_string& operator=(const charT* s);
-
- <p align="left">
- basic_string& operator=(charT c);
-
- <p align="left">
- basic_string& operator=(initializer_list<charT>);
-
- <p align="left">
-
-
- <p align="left">//
- 21.3.3 iterators:
-
- <p align="left">...
-
- <p align="left">
-
-
- <p align="left">//
- 21.3.4 capacity:
-
- <p align="left">...
-
- <p align="left">
-
-
- <p align="left">//
- 21.3.5 element access:
-
- <p align="left">...
-
- <p align="left">
-
-
- <p align="left">//
- 21.3.6 modifiers:
-
- <p align="left">...
-
- <p align="left">
-
-
- <p align="left">
- basic_string& append(const basic_string& str);
-
- <p align="left">
- basic_string& append(const basic_string& str,
- size_type pos,
-
- <p align="left">
- size_type n);
-
- <p align="left">
- basic_string& append(const charT* s, size_type n);
-
- <p align="left">
- basic_string& append(const charT* s);
-
- <p align="left">
- basic_string& append(size_type n, charT c);
-
- <p align="left">
- template<<u>InputIterator</u> <u>Iter</u>>
-
- <p align="left">
- basic_string& append(<u>Iter</u> first, <u>Iter</u>
- last);
-
- <p align="left">
- basic_string& append(initializer_list<charT>);
-
- <p align="left">
- void push_back(charT c);
-
- <p align="left">
-
-
- <p align="left">
- basic_string& assign(const basic_string& str);
-
- <p align="left">
- basic_string& assign(basic_string&& str);
-
- <p align="left">
- basic_string& assign(const basic_string& str,
- size_type pos,
-
- <p align="left">
- size_type n);
-
- <p align="left">
- basic_string& assign(const charT* s, size_type n);
-
- <p align="left">
- basic_string& assign(const charT* s);
-
- <p align="left">
- basic_string& assign(size_type n, charT c);
-
- <p align="left">
- template<<u>InputIterator</u> <u>Iter</u>>
-
- <p align="left">
- basic_string& assign(<u>Iter</u> first, <u>Iter</u>
- last);
-
- <p align="left">
- basic_string& assign(initializer_list<charT>);
-
- <p align="left">
-
-
- <p align="left">
- basic_string& insert(size_type pos1, const
- basic_string& str);
-
- <p align="left">
- basic_string& insert(size_type pos1, const
- basic_string& str,
-
- <p align="left">
- size_type pos2, size_type n);
-
- <p align="left">
- basic_string& insert(size_type pos, const charT* s,
- size_type n);
-
- <p align="left">
- basic_string& insert(size_type pos, const charT* s);
-
- <p align="left">
- basic_string& insert(size_type pos, size_type n, charT
- c);
-
- <p align="left">
- iterator insert(const_iterator p, charT c);
-
- <p align="left">
- void insert(const_iterator p, size_type n, charT c);
-
- <p align="left">
- template<<u>InputIterator</u> <u>Iter</u>>
-
- <p align="left">
- void insert(const_iterator p, <u>Iter</u> first,
- <u>Iter</u> last);
-
- <p align="left">
- void insert(const_iterator p,
- initializer_list<charT>);
-
- <p align="left">
-
-
- <p align="left">...
-
- <p align="left">
- basic_string& replace(size_type pos1, size_type n1,
-
- <p align="left">
- const basic_string& str);
-
- <p align="left">
- basic_string& replace(size_type pos1, size_type n1,
-
- <p align="left">
- const basic_string& str,
-
- <p align="left">
- size_type pos2, size_type n2);
-
- <p align="left">
- basic_string& replace(size_type pos, size_type n1,
- const charT* s,
-
- <p align="left">
- size_type n2);
-
- <p align="left">
- basic_string& replace(size_type pos, size_type n1,
- const charT* s);
-
- <p align="left">
- basic_string& replace(size_type pos, size_type n1,
- size_type n2,
-
- <p align="left">
- charT c);
-
- <p align="left">
- basic_string& replace(iterator i1, iterator i2,
-
- <p align="left">
- const basic_string& str);
-
- <p align="left">
- basic_string& replace(iterator i1, iterator i2, const
- charT* s,
-
- <p align="left">
- size_type n);
-
- <p align="left">
- basic_string& replace(iterator i1, iterator i2, const
- charT* s);
-
- <p align="left">
- basic_string& replace(iterator i1, iterator i2,
-
- <p align="left">
- size_type n, charT c);
-
- <p align="left">
- template<<u>InputIterator</u> <u>Iter</u>>
-
- <p align="left">
- basic_string& replace(iterator i1, iterator i2,
-
- <p align="left">
- <u>Iter</u> j1, <u>Iter</u> j2);
-
- <p align="left">
- basic_string& replace(iterator, iterator,
- initializer_list<charT>);
-
- <p align="left">
-
-
- <p align="left">...
-
- <p align="left">
-
-
- <p align="left">//
- 21.3.7 string operations:
-
- <p align="left">...
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits, <u>Allocator</u>
- <u>Alloc></u>
-
- <p align="left">
- struct constructible_with_allocator_suffix<
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">
- basic_string<charT, traits, <u>Alloc</u>> > :
- true_type { };
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p>
-
- See UK 216<tr valign="top">
- <td width="29">
- <p>JP 47
-
- <td width="75">
- <p align="left">21.3
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">
- Typo. Missing ”>”
-
- <p align="left">
- template <class charT, class traits, Allocator Alloc
-
- <p align="left">
- <br>
-
- <p align="left">
- should be
-
- <p align="left">
- <br>
-
- <p align="left">
- template <class charT, class traits, Allocator Alloc>
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Correct typo.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 48
-
- <td width="75">
- <p align="left">21.3
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left">
- char_traits does not use concept.
-
- <p align="left">For
- example, create CharTraits concept and change as follows:
-
- <p align="left">
- <br>
-
- <p align="left">
- template<class charT, <u>CharTraits</u> traits =
- char_traits<charT>,
-
- <p align="left">
- class Allocator = allocator<charT> >
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">class
- basic_string {
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- a concept for char_traits.
-
- <td width="225">
- <p>
-
- See UK 216<tr valign="top">
- <td width="29">
- <p>UK<br>
- 217
-
- <td width="75">
- <p align="justify">21.3
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">basic_string refers to
- constructible_with_allocator_suffix, which I thought was
- removed?
-
- <td width="466">
- <p align="left">Remove the
- lines: template <class charT, class traits, class Alloc
- struct constructible_with_allocator_suffix<
- basic_string<charT, traits, Alloc> > : true_type {
- };
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 218
-
- <td width="75">
- <p align="justify">21.3.1
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The identity
- "&*(s.begin() + n) == &*s.begin() + n" relies on
- operator& doing the "right thing", which (AFAICS) there
- is no requirement for. See my comment under clauses
- "23.2.1, 23.2.6" (p1 in both cases) - this is the same
- issue, but I've created a separate comment for basic_string
- because it is in a different chapter.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">See my recommendations for "23.2.1,
- 23.2.6".
-
- <td width="225">
- <p>
-
- NAD, we think. basic_string elements have to be POD and PODs may not have
- overloaded operator&. Need to check whether this is true in light of relaxed
- POD constraints.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 219
-
- <td width="75">
- <p align="justify">21.3.6.6<br>
- [string.<br>
- replace]
-
- <td width="31">
- <p align="justify">11
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Effects refers to "whose first begin() - i1
- elements" However i1 is greater than begin()...
-
- <td width="466">
- <p align="left">Effects refers to "whose first i1 - begin()
- elements"
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 220
-
- <td width="75">
- <p align="justify">21.3.8.9
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The
- operator<< for basic_string takes the output stream
- by r-value reference. This is different from the same
- operator for error_code (19.4.2.6), bitset (20.2.6.3),
- shared_ptr (20.7.13.2.8), complex (26.3.6) and sub_match
- (28.4)
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Use the same reference type for the all the
- library types. This should be the r-value reference. There
- are other places in the standard where TR1, and new
- classes, did not receive an 'R-value' update.
-
- <td width="225">
- <p>
-
- We did it differently for basic_string because otherwise rvalue strreaming
- was producing confusing results with strings, but this difference will be
- fixed by N2831 if it's accepted.<tr valign="top">
- <td width="29">
- <p>FR 33
-
- <td width="75">
- <p>22.1.1<br>
- [locale]
-
- <td width="31">
- <p>3
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>ios_base::iostate err = 0;
-
- <p>
-
- <p>iostate is a bitmask type and
- so could be an enumeration. Probably using
-
- <p>goodbit is the solution.
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 49
-
- <td width="75">
- <p align="left">22.1.3.2.2
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left">
- codecvt does not use concept. For example, create
- CodeConvert concept and change as follows.
-
- <p align="left" style="margin-top: 0.04in">
- template<<u>CodeConvert</u> Codecvt, class Elem =
- wchar_t> class wstring_convert {
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- a concept for codecvt.
-
- <td width="225">
- <p>
-
- to be handled by Howard Hinnant, Dave Abrahams, Martin Sebor, PJ Plaugher<tr valign="top">
- <td width="29">
- <p>JP 50
-
- <td width="75">
- <p align="left">22.1.3.2.2
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">Add
- custom allocator parameter to wstring_convert, since we
- cannot allocate memory for strings from a custom allocator.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- template<class Codecvt, class Elem = wchar_t> class
- wstring_convert {
-
- <p align="left">
- public:
-
- <p align="left">
- typedef std::basic_string<char> byte_string;
-
- <p align="left">
- typedef std::basic_string<Elem> wide_string;
-
- <p align="left">
-
-
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
-
- <p align="left">
-
-
- <p align="left">
- template<class Codecvt, class Elem = wchar_t<u>,</u>
-
- <p align="left">
- <u>Allocator WideAllocator = allocator<Elem>,</u>
-
- <p align="left">
- <u>Allocator ByteAllocator = allocator<char></u>>
-
- <p align="left">
- class wstring_convert {
-
- <p align="left">
- public:
-
- <p align="left">
- typedef std::basic_string<char,
- <u>char_traits<char>, ByteAllocator</u>>
- byte_string;
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">typedef
- std::basic_string<Elem, <u>char_traits<Elem>,
- WideAllocator</u>> wide_string;
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p>
-
- to be handled by PJ Plaugher<tr valign="top">
- <td width="29">
- <p>FI 4
-
- <td width="75">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">22.2.1.4.1
-
- <p>22.2.1.4.2
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p><tt>to_end and to_limit are both used. Only one is
- needed.</tt>
-
- <td width="466">
- <p>Change to_limit to to_end.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>FI 5
-
- <td width="75">
- <p><tt>22.2.1.4.2</tt>
-
- <td width="31">
- <p>#3
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in"><tt>[ Note: As
- a result of operations on state, it can return ok or
- partial and set next == from and to_next != to. —end
- note ]</tt><br>
- <br>
- <br>
-
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in"><tt>"next"
- should be "from_next."</tt>
-
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in"><tt>Also, the
- sentence applies to all the examples, including do_in and
- do_out.</tt>
-
- <p><tt>Reasoning: When reading one element of multibyte
- source data such as UTF-8, it is possible that from_next is
- incremented, to_next is unaltered, state is altered and
- return value is partial.<br>
- When reading one element of wide character data, the output
- can be several multibyte characters, so it is possible that
- from_next is unaltered, to_next is advanced, state is
- altered and return value is partial.</tt>
-
- <td width="466">
- <p><tt>[ Note: As a result of operations on state, do_in
- and do_out can return</tt><br>
- <tt>ok or partial and set from_next == from and/or to_next
- != to. —end</tt><br>
- <tt>note ]</tt>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>FI 6
-
- <td width="75">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">22.2.1.5
-
- <p>See also<br>
- 22.2.1.4<br>
- (1,2,3)
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">
- <tt>codecvt_byname is only specified to work with locale
- names. There is no built-in means to find a codecvt with a
- character set's name. A locale and a character set are not
- the same. If the user has data which is encoded in a
- certain character set and she wants to create a codecvt
- which can convert from that character set to another one,
- she must iterate through locales to find one, or use
- external means (iconv, ICU's uconv). Specifying a locale
- with the character set is not a suitable solution, since
- there is no built-in mapping from character sets to
- locales. It is only possible to inquire the character set
- once the locale is known.</tt>
-
- <p>
-
- <td width="466">
- <p><tt>There should be a built-in means to find a codecvt
- with a pair of character set names.</tt>
-
- <td width="225">
- <p>
-
- Martin Sebor interested in solving this problem (also POSIX group), but
- addressing it controversial because it's probably too late in the process
- for what looks like a new feature.<tr valign="top">
- <td width="29">
- <p>FI 7
-
- <td width="75">
- <p>22.2.1.4
-
- <td width="31">
- <p>1,2,3
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">The word
- "codeset" is used, whereas the word "character set" is used
- elsewhere in the text. The words are intended to convey the
- same concept, so only one should be used (or always both
- together).
-
- <p>
-
- <td width="466">
- <p>Change "codeset" to "character set."
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 51
-
- <td width="75">
- <p align="left">22.2.5.1.1
-
- <td width="31">
- <p align="left">7<sup>th</sup> <font size="2"
- style="font-size: 11pt">para, 1<sup>st</sup>
- line</font>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">A
- parameter `end’ should be `fmtend’.<br>
- get() function had two `end’ parameters at N2321.
-
- <p align="left">
- iter_type get (iter_type s, iter_type end, ios_base& f,
- ios_base::iostate& err, tm* t, const char_type* fmt,
- const char_type *end) const;
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">The function
- prototype of get() has been corrected at N2800, but a
- Requires statement still refers `end’ parameter.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- Requires: [fmt,end) shall be a valid range.
-
- <p align="left">
- <br>
-
- <p align="left">
- should be
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in"><br>
- <br>
-
- <p align="left" style="margin-top: 0.04in">
- Requires: [fmt,fmtend) shall be a valid range.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 52
-
- <td width="75">
- <p align="left">22.2.5.1,<br>
- 22.2.5.2,<br>
- 22.2.6.1
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- InputIterator does not use concept.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- <br>
-
- <p align="left">
- 22.2.5.1
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class InputIterator =
- istreambuf_iterator<charT> >
-
- <p align="left">
- class time_get : public locale::facet, public time_base {
-
- <p align="left">
- public:
-
- <p align="left">
- typedef charT char_type;
-
- <p align="left">
- typedef InputIterator iter_type;
-
- <p align="left">
-
-
- <p align="left">
- should be
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, <u>InputIterator InputIter</u> =
- istreambuf_iterator<charT> >
-
- <p align="left">
- class time_get : public locale::facet, public time_base {
-
- <p align="left">
- public:
-
- <p align="left">
- typedef charT char_type;
-
- <p align="left">
- typedef <u>InputIter</u> iter_type;
-
- <p align="left">
-
-
- <p align="left">
-
-
- <p align="left">
- 22.2.5.2
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class InputIterator =
- istreambuf_iterator<charT> >
-
- <p align="left">
- class time_get_byname : public time_get<charT,
- InputIterator> {
-
- <p align="left">
- public:
-
- <p align="left">
- typedef time_base::dateorder dateorder;
-
- <p align="left">
- typedef InputIterator iter_type;
-
- <p align="left">
-
-
- <p align="left">
- should be
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, <u>InputIterator InputIter</u> =
- istreambuf_iterator<charT> >
-
- <p align="left">
- class time_get_byname : public time_get<charT,
- InputIter> {
-
- <p align="left">
- public:
-
- <p align="left">
- typedef time_base::dateorder dateorder;
-
- <p align="left">
- typedef <u>InputIter</u> iter_type;
-
- <p align="left">
-
-
- <p align="left">
-
-
- <p align="left">
- 22.2.6.1
-
- <p align="left">
-
-
- <p align="left">
- template <class charT,
-
- <p align="left">
- class InputIterator = istreambuf_iterator<charT> >
-
- <p align="left">
- class money_get : public locale::facet {
-
- <p align="left">
- public:
-
- <p align="left">
- typedef charT char_type;
-
- <p align="left">
- typedef InputIterator iter_type;
-
- <p align="left">
-
-
- <p align="left">
- should be
-
- <p align="left">
-
-
- <p align="left">
- template <class charT,
-
- <p align="left">
- <u>InputIterator InputIter</u> =
- istreambuf_iterator<charT> >
-
- <p align="left">
- class money_get : public locale::facet {
-
- <p align="left">
- public:
-
- <p align="left">
- typedef charT char_type;
-
- <p align="left">
- typedef <u>InputIter</u> iter_type;
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- to be handled by Howard Hinnant, Dave Abrahams, Martin Sebor, PJ Plaugher<tr valign="top">
- <td width="29">
- <p>JP 53
-
- <td width="75">
- <p align="left">22.2.5.3 ,<br>
- 22.2.5.4
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- OutputIterator does not use concept.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
-
-
- <p align="left">
- 22.2.5.3
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class OutputIterator =
- ostreambuf_iterator<charT> >
-
- <p align="left">
- class time_put : public locale::facet {
-
- <p align="left">
- public:
-
- <p align="left">
- typedef charT char_type;
-
- <p align="left">
- typedef OutputIterator iter_type;
-
- <p align="left">
-
-
- <p align="left">
- <span lang="zxx"> </span>should be
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, <u>OutputIterator OutputIter</u>
- = ostreambuf_iterator<charT> >
-
- <p align="left">
- class time_put : public locale::facet {
-
- <p align="left">
- public:
-
- <p align="left">
- typedef charT char_type;
-
- <p align="left">
- typedef <u>OutputIter</u> iter_type;
-
- <p align="left">
-
-
- <p align="left">
-
-
- <p align="left">
- 22.2.5.4
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class OutputIterator =
- ostreambuf_iterator<charT> >
-
- <p align="left">
- class time_put_byname : public time_put<charT,
- OutputIterator>
-
- <p align="left">{
-
- <p align="left">
- public:
-
- <p align="left">
- typedef charT char_type;
-
- <p align="left">
- typedef OutputIterator iter_type;
-
- <p align="left">
-
-
- <p align="left">
- should be
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, <u>OutputIterator OutputIter</u>
- = ostreambuf_iterator<charT> >
-
- <p align="left">
- class time_put_byname : public time_put<charT,
- OutputIter>
-
- <p align="left">{
-
- <p align="left">
- public:
-
- <p align="left">
- typedef charT char_type;
-
- <p align="left">typedef <u>OutputIter</u>
- iter_type;
-
- <td width="225">
- <p>
-
- to be handled by Howard Hinnant, Dave Abrahams, Martin Sebor, PJ Plaugher<tr valign="top">
- <td width="29">
- <p>JP 54
-
- <td width="75">
- <p align="left">23
-
- <td width="31">
- <p align="left">
- 2<sup>nd</sup> <font size="2" style=
- "font-size: 11pt">para, Table 79</font>
-
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- There is not <forward_list> in Table 79.
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- <forward_list> between <deque> and
- <list>.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 221
-
- <td width="75">
- <p align="justify">23
-
- <td width="31">
- <p align="justify">Table 79
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The table is missing the new
- <forward_list> header.
-
- <td width="466">
- <p align="left">Add
- <forward_list> to the table for sequence containers.
- Alternative (technical) solution might be to merge
- <forward_list> into <list>.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 222
-
- <td width="75">
- <p align="justify">23
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">It is not clear
- what purpose the Requirement tables serve in the Containers
- clause. Are they the definition of a library Container? Or
- simply a conventient shorthand to factor common semantics
- into a single place, simplifying the description of each
- subsequent container? This becomes an issue for
- 'containers' like array, which does not meet the
- default-construct-to-empty requirement, or forward_list
- which does not support the size operation. Are these
- components no longer containers? Does that mean the
- remaining requirements don't apply? Or are these
- contradictions that need fixing, despite being a clear
- design decision?
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Clarify all the tables in 23.1 are there as
- a convenience for documentation, rather than a strict set
- of requirements. Containers should be allowed to relax
- specific requirements if they call attention to them in
- their documentation. The introductory text for array should
- be expanded to mention a default constructed array is not
- empty, and forward_list introduction should mention it does
- not provide the required size operation as it cannot be
- implemented efficiently.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 55
-
- <td width="75">
- <p align="left">23.1.1
-
- <td width="31">
- <p align="left">
- 3<sup>rd</sup> <font size="2" style=
- "font-size: 11pt">para, 4<sup>th</sup> line</font>
-
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">It
- seems that “the MinimalAllocator concep” is the
- typo of “the MinimalAllocator concept”.
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Change to … models the MinimalAllocator
- concep<font color="#339966">t</font><font size="2" style=
- "font-size: 11pt">.</font>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 223
-
- <td width="75">
- <p align="justify">23.1.1
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The library does
- not define the MinimalAllocator or ScopedAllocator
- concepts, these were part of an earlier Allocators proposal
- that was rejected.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove the references to MinimalAllocator
- and ScopedAllocator, or add definitions for these concepts
- to clause 20.7.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 224
-
- <td width="75">
- <p align="justify">23.1.1
-
- <td width="31">
- <p align="justify">8
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">This paragraph implicitly requires all
- containers in clause 23 to support allocators, which
- std::array does not.
-
- <td width="466">
- <p align="left">Add an 'unless
- otherwise specified' rider somewhere in p8, or move the
- whole array container from clause 23 [containers] to clause
- 20 [utilies] to accompany bitset, pair and tuple.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 225
-
- <td width="75">
- <p align="justify">23.1.1
-
- <td width="31">
- <p align="justify">Table 81
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Inconsistent
- words used to say the same thing. Table 80 describes
- iterator/const_iterator typedef as returning an "iterator
- type whose value type is T". Table 81 expresses the same
- idea as an "iterator type pointing to T". Express identical
- ideas with the same words to avoid accidentally introducing
- subtlety and confusion
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Change return types for
- X::(const)_reverse_iterator to say "iterator type whose
- value type is (const) T".
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 226
-
- <td width="75">
- <p align="justify">23.1.1
-
- <td width="31">
- <p align="justify">10
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left"><array>
- must be added to this list. In particular it doesn't
- satisfy: - no swap() function invalidates any references,
- pointers, or iterators referring to the elements of the
- containers being swapped. and probably doesn't satisfy:
- — no swap() function throws an exception.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">If <array> remains a container, this
- will have to also reference array, which will then have to
- say which of these points it satisfies.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 227
-
- <td width="75">
- <p align="justify">23.1.1
-
- <td width="31">
- <p align="justify">Table 80
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The post-condition for a = rv uses the word
- “construction” when it means
- “assignment”
-
- <td width="466">
- <p align="left">Replace the word
- “construction” with the word
- “assignment”
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 228
-
- <td width="75">
- <p align="justify">23.1.1
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Line 4 contains
- a spelling mistake in the fragment "MinimalAllocator
- concep."
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace "concep" with "concept"
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 229
-
- <td width="75">
- <p align="justify">23.1.1
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The fragment "A container may directly call
- constructors" is not technically correct as constructors
- are not callable.
-
- <td width="466">
- <p align="left">Replace "A
- container may directly call constructors and destructors
- for its stored objects" with something similar to "A
- container may directly construct its stored objects and
- call destructors for its stored objects"
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 230
-
- <td width="75">
- <p align="justify">23.1.2
-
- <td width="31">
- <p align="justify">1
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">
- “implementations shall consider the following
- functions to be const” - what does this mean? I don't
- understand what it means by implementations considering the
- functions to be const – surely they are either
- declared const or not?
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Clarify what is meant and what requirements
- an implementation must satisfy.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 56
-
- <td width="75">
- <p align="left">23.1.3
-
- <td width="31">
- <p align="left">12<sup>th</sup> <font size="2"
- style="font-size: 11pt">para, Table 84</font>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- `array’ is unstated in Table 84 - Optional sequence
- container operations.
-
- <td width="466">
- <p align="left">Add
- `array’ to Container field for the following
- Expression.
-
- <p align="left" style=
- "text-indent: 0.15in; margin-bottom: 0in">a.front()
-
- <p align="left" style=
- "text-indent: 0.15in; margin-bottom: 0in">a.back()
-
- <p align="left" style=
- "text-indent: 0.15in; margin-bottom: 0in">a[n]
-
- <p align="left" style=
- "text-indent: 0.15in; margin-top: 0.04in">a.at(n)
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 231
-
- <td width="75">
- <p align="justify">23.1.3
-
- <td width="31">
- <p align="justify">9-11
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">These paragraphs
- are redundant now that Concepts define what it means to be
- an Iterator and guide overload resolution accordingly.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Strike 23.1.3p9-11. Make sure
- std::basic_string has constraints similar to std::vector to
- meet this old guarantee.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 232
-
- <td width="75">
- <p align="justify">23.1.3
-
- <td width="31">
- <p align="justify">Table 84
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">match_results
- may follow the requirements but is not listed a general
- purpose library container.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove reference to match_results against
- a[n] operation
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 233
-
- <td width="75">
- <p align="justify">23.1.3
-
- <td width="31">
- <p align="justify">Table 84
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Add references to the new containers.
-
- <td width="466">
- <p align="left">Add reference to
- array to the rows for: a.front(), a. back(), a[n] a.at(n).
- Add reference to forward_list to the rows for: a.front(),
- a.emplace_front(args), a.push_front(t), a.push_front(rv),
- a.pop_front(). Add reference to basic_string to the row
- for: a.at(n).
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 234
-
- <td width="75">
- <p align="justify">23.1.3
-
- <td width="31">
- <p align="justify">Table 84
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Ther reference
- to iterator in semantics for back should also allow for
- const_iterator when called on a const-qualified container.
- This would be ugly to specify in the 03 standard, but is
- quite easy with the addition of auto in this new standard.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace iterator with auto in semantics for
- back: { auto tmp = a.end(); --tmp; return *tmp; }
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 235
-
- <td width="75">
- <p align="justify">23.1.3
-
- <td width="31">
- <p align="justify">1
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">“The library provides three basic
- kinds of sequence containers: vector, list, and
- deque” - text appears to be out of date re addition
- of array and forward_list
-
- <td width="466">
- <p align="left">Change the text
- to read: “The library provides five basic kinds of
- sequence containers: array, deque, forward_list, list and
- vector”.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 236
-
- <td width="75">
- <p align="justify">23.1.3
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">[ I've moved (1)
- into a separate comment because I believe it is editorial
- in the simple sense, whereas (2) and (3) are not so
- straight forward ] (2) “vector is the type of
- sequence container that should be used by default” --
- As I understand it vector was considered first port of call
- because the things it has in common with the native array
- make programmers (especially those new to the container
- library) feel like they are on familiar territory. However,
- we now have the array container, so I think this should be
- recommended as the first port of call. (3) This paragraph
- is actually giving guidance on the use of the containers
- and should not be normative text
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove this paragraph
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 237
-
- <td width="75">
- <p align="justify">23.1.3
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">vector, list, and deque offer the
- programmer different complexity trade-offs and should be
- used accordingly - this ignores array and forward_list
-
- <td width="466">
- <p align="left">Modify the text
- to read: "array, deque, forward_list, list and vector offer
- the programmer different complexity trade-offs and should
- be used accordingly"
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 238
-
- <td width="75">
- <p align="justify">23.1.4
-
- <td width="31">
- <p align="justify">6
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Leaving it
- unspecified whether or not iterator and const_iterator are
- the same type is dangerous, as user code may or may not
- violate the One Definition Rule by providing overloads for
- both types. It is probably too late to specify a single
- behaviour, but implementors should document what to expect.
- Observing that problems can be avoided by users restricting
- themselves to using const_iterator, add a note to that
- effect.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Change 'unspecified' to 'implementation
- defined'. Add "[Note: As itererator and const_iterator have
- identical semantics in this case, and iterator is
- convertible to const_iterator, users can avoid violating
- the One Definition Rule by always using const_iterator in
- their function parameter lists -- end note]
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 239
-
- <td width="75">
- <p align="justify">23.1.4
-
- <td width="31">
- <p align="justify">85
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">It is not possible to take a move-only key
- out of an unordered container, such as (multi)set or
- (multi)map, or the new hashed containers.
-
- <td width="466">
- <p align="left">Add below
- a.erase(q), a.extract(q), with the following notation:
- a.extract(q), Return type pair<key, iterator>
- Extracts the element pointed to by q and erases it from the
- set. Returns a pair containing the value pointed to by q
- and an iterator pointing to the element immediately
- following q prior to the element being erased. If no such
- element exists,returns a.end().
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 240
-
- <td width="75">
- <p align="justify">23.1.6.1
-
- <td width="31">
- <p align="justify">12
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The axiom
- EmplacePushEquivalence should be asserting the stronger
- contract that emplace and insert return the same iterator
- value, not just iterators that dereference to the same
- value. This is a similar statement that is easier to
- express and should be equivalent - the idea that insert and
- emplace might return iterator values that do not compare
- equal but point to the same element should fail somewhere
- in the iterator concepts. Also, this axiom should be
- renamed to reflect its connection with insert, rather than
- push_front/push_back,
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove the * to deference the returned
- iterator either side of the == in the
- EmplacePushEquivalence axiom, rename the axiom
- EmplacementInsertionEquivalence : requires
- InsertionContainer<C> &&
- Constructible<value_type, Args...> axiom
- EmplacementInsertionEquivalence(C c, const_iterator
- position, Args... args) { emplace(c, position, args...) ==
- insert(c, position, value_type(args...)); }
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 57
-
- <td width="75">
- <p align="left">23.1.6.3
-
- <td width="31">
- <p align="left">
- 1<sup>st</sup> <font size="2" style=
- "font-size: 11pt">para, 4<sup>th</sup> line</font>
-
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">
- Typo, duplicated "to"
-
- <p align="left" style="margin-top: 0.04in">
- "<u>to to</u> model insertion container concepts."
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Remove one.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 241
-
- <td width="75">
- <p align="justify">23.2.1
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">std::array does
- not have an allocator, so need to document an exception to
- the requirements of 23.1.1p3
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">add exception to 23.1.1p3
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 242
-
- <td width="75">
- <p align="justify">23.2.1
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">std:: qualification no longer needed for
- reverse_iterator.
-
- <td width="466">
- <p align="left">remove std::
- qualification from std::reverse_iterator<iterator>
- and std::reverse_iterator<const_iterator>
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 243
-
- <td width="75">
- <p align="justify">23.2.1
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Most containers,
- and types in general have 3 swaps: swap(T&, T&)
- swap(T&&, T&) swap(T&, T&&) But
- array only has swap(T&, T&).
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">add the other two swaps.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 244
-
- <td width="75">
- <p align="justify">23.2.1,<br>
- 23.2.6
-
- <td width="31">
- <p align="justify">1
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The validity of
- the expression &a[n] == &a[0] + n is contingent on
- operator& doing the “right thing” (as
- captured by the CopyConstructible requirements in table 30
- in C++2003). However this constraint has been lost in the
- Concepts of C++0x. This applies to vector and array (it
- actually applies to string also, but that's a different
- chapter, so I'll file a separate comment there and
- cross-reference).
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Define a ContiguousStrorage and apply it to
- vector,array and string. The Concept (supplied by Alisdair
- M) looks like this: Concept< typename C >
- ContiguousStrorage { requires Container<C>; typename
- value_type = C::value_type; value_type * data( C ); axiom
- Contiguous { C c; true = equal_ranges( data( c), data(c) +
- size(c), begin(c)); } };
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 245
-
- <td width="75">
- <p align="justify">23.2.3
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The predicate types used in special member
- function of forward_list should be CopyConstructible, as
- per the algorithms of the same name. Note: an alternate
- solution would be to require these callable concepts to be
- CopyConstructible in clause 20, which would simplify the
- library specification in general. See earlier comment for
- details, that would render this one redundant.
-
- <td width="466">
- <p align="left">Add
- CopyConstructible requirement to the following signatures:
- template <Predicate<auto, T> Pred> requires
- CopyConstructible<Pred> void remove_if(Pred pred);
- template <EquivalenceRelation<auto, T>
- BinaryPredicate> requires
- CopyConstructible<BinaryPredicate> void
- unique(BinaryPredicate binary_pred); template
- <StrictWeakOrder<auto, T> Compare> requires
- CopyConstructible<Compare> void
- merge(forward_list<T,Alloc>&& x, Compare
- comp); template <StrictWeakOrder<auto, T>
- Compare> requires CopyConstructible<Compare> void
- sort(Compare comp);
-
- <p align="left"><br>
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 58
-
- <td width="75">
- <p align="left">23.2.3.2
-
- <td width="31">
- <p align="left">
- 1<sup>st</sup> <font size="2" style="font-size: 11pt">line
- before 1<sup>st</sup> para</font>
-
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- Unnecessary "{" exists before a word iterator like
- "{iterator before_begin()".
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Remove "{"
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>JP 59
-
- <td width="75">
- <p align="left">23.2.4.4
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- Types of the third and forth parameter of splice() are
- iterator at 23.2.4.4, though types of them are
- const_iterator at 23.2.4. (They are both const_iterator on
- N2350)
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- void splice(const_iterator position,
- list<T,Allocator>&& x, iterator i);
-
- <p align="left">
- void splice(const_iterator position,
- list<T,Allocator>&& x,
-
- <p align="left">
- iterator first, iterator last);
-
- <p align="left">
- <br>
-
- <p align="left">
- should be
-
- <p align="left">
- <br>
-
- <p align="left">
- void splice(const_iterator position,
- list<T,Allocator>&& x, const_iterator i);
-
- <p align="left">
- void splice(const_iterator position,
- list<T,Allocator>&& x,
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">const_iterator
- first, const_iterator last);
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 83
-
- <td width="75">
- <p align="left">23.2.6.2
-
- <td width="31">
- <p align="left">7
-
- <td width="38">
- <p align="left">ed
-
- <td width="375">
- <p align="left">
- "shrink_to_fint" should be "shrink_to_fit".
-
- <p align="left">
- <br>
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 246
-
- <td width="75">
- <p align="justify">23.3.2.2
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The content of
- this sub-clause is purely trying to describe in words the
- effect of the requires clauses on these operations, now
- that we have Concepts. As such, the desctiption is more
- confusing than the signature itself. The semantic for these
- functions is adequately covered in the requirements tables
- in 23.1.4.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Strike 23.3.2.2 entirely. (but do NOT
- strike these signatures from the class template
- definition!)
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 247
-
- <td width="75">
- <p align="justify">24.1
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ge
-
- <td width="375">
- <p align="left">Iterator
- concepts are not extensive enough to merit a whole new
- header, and should be merged into <concpts>. This is
- particularly important for supporting the new for loop
- syntax which requires access to the Range concept. The
- required header to enable this syntax shoud have a simple
- name, like <concepts>, rather than something awkward
- to type like <iterator_concepts>.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Move the concepts of
- <iterator_concepts> into the <concepts> header.
- We take no position on moving the text from Clause 24 to
- Clause 20 though.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 248
-
- <td width="75">
- <p align="justify">24.1
-
- <td width="31">
- <p align="justify">6
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The text "so for
- any iterator type there is an iterator value that points
- past the last element of a corresponding container" is
- slightly misleading. Iterators can refer into generalised
- ranges and sequences, not just containers. A broader term
- than 'container' should be used.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace the reference to container with a
- more appropriate concept
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 250
-
- <td width="75">
- <p align="justify">24.1.1
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">A default implementation should be supplied
- for the post-increment operator to simplify implementation
- of iterators by users.
-
- <td width="466">
- <p align="left">Copy the Effects clause into the concept
- description as the default implementation. Assumes a
- default value for postincrement_result
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 251
-
- <td width="75">
- <p align="justify">24.1.1
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The
- post-increment operator is dangerous for a general
- InputIterator. The multi-pass guarantees that make it
- meaningful are defined as part of the ForwardIterator
- refinement. Any change will affect only constrained
- templates that have not yet been written, so should not
- break existing user iterators which remain free to add
- these operations. This change will also affect the
- generalised OutputIterator, although there is no percieved
- need for the post-increment operator in this case either.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Move declaration of postincrement operator
- and postincrement_result type from Interator concept to the
- ForwardIterator concept
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p align="justify" style=
- "margin-right: -0.18in; margin-bottom: 0in">UK<br>
- 252
-
- <p>
-
- <td width="75">
- <p align="justify">24.1.2
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">istream_iterator is not a class, but a
- class template
-
- <td width="466">
- <p align="left">Change 'class' to 'class template' in the
- note.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 253
-
- <td width="75">
- <p align="justify">24.1.3
-
- <td width="31">
- <p align="justify">1
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">First sentance
- does not make gramatical sense, Seems to be missing the
- words 'if it' by comparison with similar sentance in other
- subsections
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add the words 'if it' : "X satisfies the
- requirements of an output iterator IF IT meets the
- syntactic and semantic requirements"
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 254
-
- <td width="75">
- <p align="justify">24.1.3
-
- <td width="31">
- <p align="justify">5
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">This
- postcondition for pre-increment operator should be written
- as an axiom
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Move the postcondition into the concept
- definition as an axiom
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 255
-
- <td width="75">
- <p align="justify">24.1.4
-
- <td width="31">
- <p align="justify">4
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">This
- postcondition for pre-increment operator should be written
- as an axiom
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Move the postcondition into the concept
- definition as an axiom
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 256
-
- <td width="75">
- <p align="justify">24.1.5
-
- <td width="31">
- <p align="justify">3, 4, 5
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The relationship between pre- and post-
- decrement should be expressed as an axiom.
-
- <td width="466">
- <p align="left">Move the text
- specification of pre/post-conditions and behaviour into an
- axiom within the BidirectionalIterator concept
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 257
-
- <td width="75">
- <p align="justify">24.1.5
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">There is a
- reasonable default for postdecrement_result type, which is
- X. X is required to be regular, therefore CopyConstructible
- and a valid ResultType. Together with the next comment this
- simplifies user defined iterator implentations
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add the default : typename
- postincrement_result = X;
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 258
-
- <td width="75">
- <p align="justify">24.1.5
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">A default
- implementation should be supplied for the post-decrement
- operator to simplify implementation of iterators by users.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Copy the Effects clause into the concept
- description as the default implementation. Assumes a
- default value for postincrement_result
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 259
-
- <td width="75">
- <p align="justify">24.1.5
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">
- postdecrement_result is effectively returning a copy of the
- original iterator value, so should have similar
- constraints, rather than just HasDereference. If Concepts
- do not support this circularity of definition suggest that
- concepts feature may want a little more work
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add the requirement: requires Iterator<
- postdecrement_result >;
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 260
-
- <td width="75">
- <p align="justify">24.1.5
-
- <td width="31">
- <p align="justify">6
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The effects clause for post-decrement
- iterator should be available as an axiom and a default
- implementation, where the compiler can make better use of
- it.
-
- <td width="466">
- <p align="left">Move the Effects
- clause into the BidirectionalIterator concept definition as
- an axiom, and as the default implementation for the
- operation.
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 249
-
- <td width="75">
- <p align="justify"><span lang=
- "en-US">24.1.6</span>
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The semantic for
- operator+= should also be provided as a default
- implementation to simplify implementation of user-defined
- iterators
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Copy the text from the effects clause into
- the RandomAccessIterator concept as the default
- implementaiton.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 261
-
- <td width="75">
- <p align="justify">24.1.6
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">To simplify user
- defined random access iterator types, the
- subscript_reference type should default to reference
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">typename subscript_reference = reference;
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 262
-
- <td width="75">
- <p align="justify">24.1.6
-
- <td width="31">
- <p align="justify">3, 4
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Effects and post-conditions for operator+
- are more useful if expressed as axioms, and supplied as
- default implementations.
-
- <td width="466">
- <p align="left">Move the effects
- and Postcondition definitions into the RandomAccessIterator
- concept and copy the code in the specification as the
- default implementation of these operations.
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 263
-
- <td width="75">
- <p align="justify">24.1.6
-
- <td width="31">
- <p align="justify">5
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">This requirement on operator-= would be
- better expressed as a default implementation in the
- concept, with a matching axiom
-
- <td width="466">
- <p align="left">Move the
- specification for operator-= from the returns clause into
- an axiom and default implementation within the
- RandomAccessIterator concept
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 264
-
- <td width="75">
- <p align="justify">24.1.6
-
- <td width="31">
- <p align="justify">6
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Effects clauses are better expressed as
- axioms where possible.
-
- <td width="466">
- <p align="left">Move code in
- operator- effects clause into RandomAccessIterator concept
- as both a default implementation and an axiom
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 265
-
- <td width="75">
- <p align="justify">24.1.6
-
- <td width="31">
- <p align="justify">8
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">This effects
- clause is nonesense. It looks more like an axiom stating
- equivalence, and certainly an effects clause cannot change
- the state of two arguments passed by const reference
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Strike the Effects clause
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 266
-
- <td width="75">
- <p align="justify">24.1.6
-
- <td width="31">
- <p align="justify">9
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">This sentance should be provided as a
- default definition, along with a matching axiom
-
- <td width="466">
- <p align="left">Move the Returns
- clause into the spefication for RandomAccessIterator
- operator- as a default implementation. Move the Effects
- clause as the matching axiom.
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 267
-
- <td width="75">
- <p align="justify">24.1.6
-
- <td width="31">
- <p align="justify">24.1.6
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The code in the
- Requires clause for RandomAccessIterator operator[] would
- be better expressed as an axiom.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Rewrite the Requires clause as an axiom in
- the RandomAccessIterator concept
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 268
-
- <td width="75">
- <p align="justify">24.1.6
-
- <td width="31">
- <p align="justify">12
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">This note is
- potentialy confusing as __far enters the syntax as a clear
- language extension, but the note treats it as a regular
- part of the grammar. It might be better expressed using
- attributes in the current wording.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Clean up the note to either avoid using
- language extension, or spell out this is a constraint to
- support extensions.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 60
-
- <td width="75">
- <p align="left">24.1.8
-
- <td width="31">
- <p align="left">1<sup>st</sup> <font size="2"
- style="font-size: 11pt">para</font>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left">
- Capability of an iterator is too much restricted by
- concept.
-
- <p align="left">
- <br>
-
- <p align="left">
- Concept of std::Range is defined as:
-
- <p align="left">
- <br>
-
- <p align="left">
- concept Range<typename T> {
-
- <p align="left">
- InputIterator iterator;
-
- <p align="left">
- iterator begin(T&);
-
- <p align="left">
- iterator end(T&);
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">So
- the following code generates an error.
-
- <p align="left">
- <br>
-
- <p align="left">
- template <std::Range Rng>
-
- <p align="left">
- void sort(Rng& r)
-
- <p align="left">{
-
- <p align="left" style=
- "margin-left: 0.08in; text-indent: -0.08in; margin-bottom: 0in">
- // error! Rng::iterator does not satisfy requirements of a
- random
-
- <p align="left" style=
- "margin-left: 0.07in; text-indent: 0.08in; margin-bottom: 0in">
- // access iterator.
-
- <p align="left">
- std::sort(begin(r), end(r));
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- std::vector<int> v; // vector::iterator is a random
- access iterator.
-
- <p align="left">
- sort(v);
-
- <p align="left">
- <br>
-
- <p align="left">
- This is because the concept of an iterator of std::Range is
- InputIterator. For this reason, a random access iterator
- loses its capability when passed to a std::Range parameter.
-
- <p align="left">
- <br>
-
- <p align="left">To
- be able to work the above code, we need to write as
- follows:
-
- <p align="left">
- <br>
-
- <p align="left">
- template <std::Range T>
-
- <p align="left">
- requires std::RandomAccessIterator<T::iterator>
- &&
-
- <p align="left">
- std::ShuffleIterator<T::iterator> &&
-
- <p align="left">
- std::LessThanComparable<T::iterator::value_type>
-
- <p align="left">
- void sort(T& r)
-
- <p align="left">{
-
- <p align="left">
- sort(begin(r), end(r));
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- std::vector<int> v;
-
- <p align="left">
- sort(v);
-
- <p align="left">
- <br>
-
- <p align="left">It
- needs quiet a few amount of codes like this only to recover
- random access capability from InputIterator concept.
-
- <p align="left">
- <br>
-
- <p align="left">We
- can write the following valid code with Boost.Range, which
- is implemented with using C++03 SFINAE.
-
- <p align="left">
- <br>
-
- <p align="left">
- template <class Range>
-
- <p align="left">
- void sort(Range& r)
-
- <p align="left">{
-
- <p align="left">
- std::sort(boost::begin(r), boost::end(r));
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- std::vector<int> v;
-
- <p align="left">
- sort(v); // OK
-
- <p align="left">
- <br>
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">One of the
- motivation to introduce concepts are supporting template
- programming techniques by language directly to eliminate
- hacky techniques such as tag-dispatch, SFINAE and Type
- Traints. But SFINAE will be kept using because it needs
- quite a few amount of codes without using SFAINAE.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- InputRange, OutputRange, ForwardRange, BidirectionalRange
- and RandomAccessRange.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 269
-
- <td width="75">
- <p align="justify">24.3
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">'decrements for
- negative n' seems to imply a negative number of decrement
- operations, which is odd.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Need simple, clearer wording
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 270
-
- <td width="75">
- <p align="justify">24.3
-
- <td width="31">
- <p align="justify">4
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The reachability
- constraint in p5 means that a negavite result, implying
- decrements operations in p4, is not possible
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Split the two overloads into separate
- descriptions, where reachability is permitted to be in
- either direction for RandomAccessIterator
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 271
-
- <td width="75">
- <p align="justify">24.3
-
- <td width="31">
- <p align="justify">6,7
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">next/prev return
- an incremented iterator without changing the value of the
- original iterator. However, even this may invalidate an
- InputIterator. A ForwardIterator is required to guarantee
- the 'multipass' property.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace InputIterator constraint with
- FOrwardIterator in next and prev function templates.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 272
-
- <td width="75">
- <p align="justify">24.4
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">reverse_iterator
- and move_iterator use different formulations for their
- comparison operations. move_iterator merely requires the
- minimal set of operations, < and ==, from its underlying
- iterator and synthesizes all oprations from these two.
- reverse_iterator relies on the undelying iterator to
- support all comparision operations directly. In practice,
- move_iterator can only be implemented this way as it must
- support iterator types that are merely InputIterators, and
- so SemiRegular and not Regular. However, reserse_iterator
- has an existing specification and any change of semantic
- could change behaviour of conforming programs today -
- although an iterator that yields different results for (a
- > b) than (b < a) may fall foul of some semantic
- consistency requirements, even if the syntax is met.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Rephrase the reverse_iterator comparison
- operations using only operators < and ==, as per the
- move_iterator specification.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 274
-
- <td width="75">
- <p align="justify">24.4, 24.5
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The subclauses
- for standard iterator adaptors could be better organised.
- There are essentially 3 kinds of iterator wrappers
- provided, stream iterators adapt streams and get their own
- subsection. insert iterators adapt containers, and get
- their own subsection but it is inserted into the middle of
- 24.4 Predifined iterators. reverse_iterator and
- move_iterator adpat other iterators, but their presentation
- is split by insert iterators
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Promote 24.4.2 [insert.iterators] up one
- level to 24.6. Emphasize that insert iterators adapt
- containers Retarget 24.4 [predef.iterators] as iterator
- adapters for iterator templates that wrap other iterators.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 275
-
- <td width="75">
- <p align="justify">24.4.1.1
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The constructor
- template taking a single Iterator argument will be selected
- for Copy Initialization instead of the non-template
- constructor taking a single Iterator argument selected by
- Direct Initialization.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">The reverse_iterator template constructor
- taking a single Iterator argument should be explicit.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 276
-
- <td width="75">
- <p align="justify">24.4.1.1
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">It is odd to
- have a mix of declaration stlyes for operator+ overloads.
- Prefer if either all are member functions, or all are
- 'free' functions.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Make the member operators taking a
- difference_type argument non-member operators
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 277
-
- <td width="75">
- <p align="justify">24.4.1.2.1
-
- <td width="31">
- <p align="justify">1
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The default
- constructor default-initializes current, rather than
- value-initializes. This means that when Iterator
- corresponds to a trivial type, the current member is left
- un-initialized, even when the user explictly requests value
- intialization! At this point, it is not safe to perform any
- operations on the reverse_iterator other than assign it a
- new value or destroy it. Note that this does correspond to
- the basic definition of a singular iterator.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">i/ Specify value initialization rather than
- default intialization or ii/ specify = default; rather than
- spell out the semantic. This will at least allow users to
- select value initialization and copy the iterator value. or
- iii/ Add a note to the description emphasizing the singular
- nature of a value-initialized reserve iterator.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 278
-
- <td width="75">
- <p align="justify">24.4.1.2.1
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">There is an
- inconsistency between the constructor taking an iterator
- and the constructor template taking a reverse_iterator
- where one passes by value, and the other by const
- reference. The by-value form is preferred as it allows for
- efficient moving when copy elision fails to kick in.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Change the const reverse_iterator<U>
- & parameter to pass-by-value
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 279
-
- <td width="75">
- <p align="justify">24.4.1.2.12,<br>
- 24.4.3.2.12
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The reason the
- return type became unspecified is LWG issue 386. This
- reasoning no longer applies as there are at least two ways
- to get the right return type with the new language
- facilities added since the previous standard.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Specify the return type using either
- decltype or the Iter concept map
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 280
-
- <td width="75">
- <p align="justify">24.4.1.2.4
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The presence of
- the second iterator value is surprising for many readers
- who underestimate the size of a reverse_iterator object.
- Adding the exposition only member that is required by the
- semantic will reduce confusion.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add reverse_iterator expsoition only member
- tmp as a comment to class declaration, as a private member
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 281
-
- <td width="75">
- <p align="justify">24.4.1.2.5
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The current
- specification for return value will always be a true
- pointer type, but reverse_iterator supports proxy iterators
- where the pointer type may be some kind of 'smart pointer'
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace the existing returns specification
- with a copy of the operator* specification that returns
- this->tmp.operator->
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 282
-
- <td width="75">
- <p align="justify">24.4.2.1,<br>
- 24.4.2.2.2,<br>
- 24.4.2.3,<br>
- 24.4.2.4.2,<br>
- 24.4.2.5,<br>
- 24.4.2.6.2
-
- <td width="31">
- <p align="justify">n/a
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Insert iterators of move-only types will
- move from lvalues
-
- <td width="466">
- <p align="left">Add an additional constrained overload for
- operator= that requires
- !CopyConstructible<Cont::value_type> and mark it
- =delete.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 283
-
- <td width="75">
- <p align="justify">24.4.2.5,<br>
- 24.4.2.6.4
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">postincrement operator overloads
- traditionally return by value - insert_iterator is declared
- as return by reference. The change is harmless in this
- case, but either front/back_insert_iterator should take the
- matching change for consistency, or this function should
- return-by-value
-
- <td width="466">
- <p align="left">change operator++(int) overload to return
- by value, not reference. Affects both class summary and
- operator definition in p
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 61
-
- <td width="75">
- <p align="left">24.4.3.2.1
-
- <td width="31">
- <p align="left">2<sup>nd</sup> <font size="2"
- style="font-size: 11pt">para, 1<sup>st</sup>
- line</font>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">
- Typo.
-
- <p align="left" style="margin-top: 0.04in">
- "intializing" should be "in<u>i</u>tializing"
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- "i"
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 284
-
- <td width="75">
- <p align="justify">24.5
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The stream
- iterators need constraining with concepts/requrires
- clauses.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Provide constraints
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 285
-
- <td width="75">
- <p align="justify">24.5.1
-
- <td width="31">
- <p align="justify">1,2
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Much of the
- content of p1 and the whole of p2 is a redundant
- redefinition of InputIterator. It should be simplified
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Strike p2. Simplify p1 and add a
- cross-reference to the definition of InputIterator concept.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 286
-
- <td width="75">
- <p align="justify">24.5.1
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">To the casual
- reader it is not clear if it is intended to be able to
- assign to istream_iterator objects. Specifying the copy
- constructor but relying on the implicit copy-assign
- operator is confusing.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Either provide a similar definition to the
- copy-assign operator as for the copy constructor, or strike
- the copy constructor
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 287
-
- <td width="75">
- <p align="justify">24.5.1.1
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">It is not clear
- what the intial state of an istream_iterator should be. Is
- _value_ initialized by reading the stream, or default/value
- initialized? If it is initialized by reading the stream,
- what happens if the initialization is deferred until first
- dereference, when ideally the iterator value should have
- been that of an end-of-stream iterator which is not safely
- dereferencable?
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Specify _value_ is initialized by reading
- the stream, or the iterator takes on the end-of-stream
- value if the stream is empty
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 288
-
- <td width="75">
- <p align="justify">24.5.1.1
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The provided specification is vacuous,
- offering no useful information.
-
- <td width="466">
- <p align="left">Either strike
- the specification of the copy constructor, or simply
- replace it with an = default definition.
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 289
-
- <td width="75">
- <p align="justify">24.5.1.2
-
- <td width="31">
- <p align="justify">6
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">It is very hard
- to pick up the correct specification for
- istream_iterator::operator== as the complete specification
- requires reading two quite disconnected paragraphs,
- 24.5.1p3, and 24.5.1.2p6. Reading just the specifaction of
- the operation itself suggests that end-of-stream iterators
- are indistinguishable from 'valid' stream iterators, which
- is a very dangerous misreading.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Merge 24.5.1p3, equality comparison of
- end-of-stream-iterators, into 24.5.1.2p6, the specification
- of the equality operator for istream_iterator.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 290
-
- <td width="75">
- <p align="justify">24.5.2
-
- <td width="31">
- <p align="justify">1
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The character
- type of a string delimiter for an ostream_iterator should
- be const charT *, the type of the elements, not char *, a
- narrow character string.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Replace char * with const charT *
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 291
-
- <td width="75">
- <p align="justify">24.5.2.2
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">ostream_iterator
- postincrement operator returns by reference rather than by
- value. This may be a small efficiency gain, but it is
- otherwise unconventional. Prefer return-by-value.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">ostream_iterator operator++(int);
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>FR 34
-
- <td width="75">
- <p>24.5.3<br>
- [istreambuf.<br>
- iterator]
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>There are two public
- sections, and the content of the second one is indented
- with respect to the first. I don't it should be.
-
- <p>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 292
-
- <td width="75">
- <p align="justify">24.5.3
-
- <td width="31">
- <p align="justify">1
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Prefer the use
- of the new nullptr constant to the zero literal when using
- a null pointer in text.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Change istreambuf_iterator(0) to
- istreambuf_iterator(nullptr)
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 293
-
- <td width="75">
- <p align="justify">24.5.3
-
- <td width="31">
- <p align="justify">2,3,4
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The listed paragraphs redundantly redefine
- an input iterator, and redundancy can be a dangerous thing
- in a specification. Suggest a simpler phrasing below.
-
- <td width="466">
- <p align="left">2. The result of
- operator*() on an end of stream is undefined. For any other
- iterator value a char_type value is returned. 3. Two end of
- stream iterators are always equal. An end of stream
- iterator is not equal to a non-end of stream iterator. 4.
- As istreambuf_iterator() is an InputIterator but not a
- ForwardIterator, istreambuf_iterators object can be used
- only for one-pass algorithms. It is not possible to assign
- a character via an input iterator.
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 294
-
- <td width="75">
- <p align="justify">24.5.3.2
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Implicit converting constructors can be
- invoked at surprising times, so there should always be a
- good reason for declaring one.
-
- <td width="466">
- <p align="left">Mark the two
- single-argument constructors take a stream or stream buffer
- as explicit. The proxy constructor should remain implicit.
- explicit
- istreambuf_iterator(basic_istream<charT,traits>&
- s) throw(); explicit
- istreambuf_iterator(basic_streambuf<charT,traits>* s)
- throw();
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 295
-
- <td width="75">
- <p align="justify">25
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">THere is a level
- of redundancy in the library specification for many
- algorithms that can be eliminated with the combination of
- concepts and default parameters for function templates.
- Eliminating redundancy simplified specification and reduces
- the risk of inttroducing accidental inconsistencies.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Adopt n2743, or an update of that paper.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 62
-
- <td width="75">
- <p align="left">25, 25.3.1.5,<br>
- 26.3.6.5
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style=
- "margin-left: 0.2in; text-indent: -0.2in; margin-bottom: 0in">
- The return types of is_sorted_until function and
- is_heap_until function are iterator. But basically, the
- return type of is_xxx function is bool. And the return type
- of lower_bound function and upper_bound is iterator.
-
- <p align="left" style=
- "text-indent: 0.2in; margin-top: 0.04in; margin-bottom: 0.04in">
- So we think that it is reasonable to change those two
- functions.
-
- <p align="left" style=
- "text-indent: 0.2in; margin-top: 0.04in"><br>
-
- <td width="466">
- <p align="left">
- Change "is_sorted_until" to "sorted_bound"
-
- <p align="left" style="margin-top: 0.04in">
- Change "is_heap" to "heap_bound"
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 296
-
- <td width="75">
- <p align="justify">25.1.8
-
- <td width="31">
- <p align="justify">1
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The 'Returns' of
- adjacent_find requires only HasEqualTo, or a Predicate.
- Requiring EqualityComparable or EquivalenceRelation seems
- too strong and not useful.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Change EqualityComparable to HasEqualTo and
- EquivalnceRelation to Predicate
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 297
-
- <td width="75">
- <p align="justify">25.2.11
-
- <td width="31">
- <p align="justify">6
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The definition
- of rotate_copy is very complicated. It is equivalent to:
- return copy(first, middle, copy(middle, last, result));
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Change 'effects' to, returns, requires,
- complexity to: effects: equivalent to: return copy(first,
- middle, copy(middle, last, result));
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 298
-
- <td width="75">
- <p align="justify">25.2.13
-
- <td width="31">
- <p align="justify">13
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">partition_point requires a partitioned
- array
-
- <td width="466">
- <p align="left">requires: is_partitioned(first, last, pred)
- != false;
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 299
-
- <td width="75">
- <p align="justify">25.2.2
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Should be consistent in style use of
- concepts in template parameter lists. The
- auto-OutputIterator sytle used in std::copy is probably
- preferred.
-
- <td width="466">
- <p align="left">Change way signature is declared:
- template<InputIterator InIter, OutputIterator<auto,
- RvalueOf<InIter::reference>::type> OutIter>
- OutIter move(InIter first, InIter last, OutIter result);
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 300
-
- <td width="75">
- <p align="justify">25.2.3
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Since publishing
- the original standard, we have learned that swap is a
- fundamental operation, and several common idioms rely on it
- - especially those related to exception safety. As such it
- belongs in the common <utility> header rather than
- the broader <algorithm> header, and likewise should
- move to clause 20. For backwards compatiblility the
- algorithm header should be required to #include
- <utility>, which would be covered in the resolution
- of LWG issue 343. There are already dependencies in
- <algorithm> on types declared in this header, so this
- comment does not create a new dependency.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Move primary swap template from
- <algorithm> into <utility>. Move 25.2.3 to
- somewhere under 20.2. Require <algorithm> to #include
- <utility> to access pair and provide legacy support
- for finding swap.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 301
-
- <td width="75">
- <p align="justify">25.2.5
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">replace and
- replace_if have the requirement: OutputIterator<Iter,
- Iter::reference> Which implies they need to copy some
- values in the range the algorithm is iterating over. This
- is not however the case, the only thing that happens is
- const T&s might be copied over existing elements (hence
- the OutputIterator<Iter, const T&>
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove OutputIterator<Iter,
- Iter::reference> from replace and replace_if
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 302
-
- <td width="75">
- <p align="justify">25.3
-
- <td width="31">
- <p align="justify">4
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">the concept
- StrictWeakOrder covers the definition of a strict weak
- ordering, described in paragraph 4.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Remove 4, and mention StrictWeakOrder in
- paragraph 1.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 303
-
- <td width="75">
- <p align="justify">25.3
-
- <td width="31">
- <p align="justify">6
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">This paragraph just describes
- is_partitioned
-
- <td width="466">
- <p align="left">6 A sequence
- [start,finish) is partitioned with respect to an expression
- f(e) if is_partitioned(start, finish, e) != false
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 304
-
- <td width="75">
- <p align="justify">25.3.6
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The requires
- clauses of push_heap, pop_heap and make_heap are
- inconsistently formatted, dispite being identical
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Format them identically.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 305
-
- <td width="75">
- <p align="justify">25.3.7
-
- <td width="31">
- <p align="justify">1, 9, 17
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The negative requirement on IsSameType is a
- hold-over from an earlier draught with a variadic template
- form of min/max algorith. It is no longer necessary.
-
- <td width="466">
- <p align="left">Strike the !IsSameType<T, Compare>
- constraint on min/max/minmax algorithms
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 84
-
- <td width="75">
- <p align="left">26
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">ge
-
- <td width="375">
- <p align="left">
- Parts of the numerics chapter are not concept enabled.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>FR 35
-
- <td width="75">
- <p>26.3<br>
- [Complex<br>
- numbers]
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>Instantiations of the class
- template complex<> have to be allowed for integral
- types, to reflect existing practice and ISO standards
- (LIA-III).
-
- <p>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 306
-
- <td width="75">
- <p align="justify">26.4
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Random number
- library component cannot be used in constrained templates
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Provide constraints for the random number
- library
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 63
-
- <td width="75">
- <p align="left">26.4.8.5.1
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left">No
- constructor of discrete_distribution that accepts
- initializer_list.
-
- <p align="left">
- discrete_distribution initialize distribution by a given
- range (iterators), but temporary variable of a container or
- an array is needed in the following case.
-
- <p align="left">
- <br>
-
- <p align="left">int
- ar[] = {1, 2, 3};
-
- <p align="left">
- discrete_distribution<> dist(ar, ar+3);
-
- <p align="left">
- <br>
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Other libraries
- also accept initializer_list, so change
- discrete_distribution library to accept initializer_list
- too.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left">Add
- the following constructer.
-
- <p align="left" style="margin-top: 0.04in">
- <u>discrete_distribution(initializer_list<result_type>);</u>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 64
-
- <td width="75">
- <p align="left">26.5.2
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">
- “valarray<T>& operator+=
- (initializer_list<T>);” is not defined.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- valarray<T>& operator+=
- (initializer_list<T>);
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 307
-
- <td width="75">
- <p align="justify">26.7
-
- <td width="31">
- <p align="justify">Footnote 288
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">The footnote
- refers to TR1, which is not a defined term in this
- standard. Drop the reference to TR1, those templates are a
- regular part of the standard now and how they were
- introduced is no longer relevant.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Drop the reference to TR1.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 85
-
- <td width="75">
- <p align="left">27
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">ge
-
- <td width="375">
- <p align="left">The
- input/output chapter is not concept enabled.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 308
-
- <td width="75">
- <p align="justify">27
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">
- <span lang="en-US">iostreams library cannot be used from
- constrained templates</span>
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Provide constraints for the iostreams
- library, clause 27
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 65
-
- <td width="75">
- <p align="left">27.4.4
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Switch from
- “unspecified-bool-type” to<span lang=
- "zxx"> “</span>explicit operator bool()
- const”.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Replace "operator <i>unspecified-bool-type</i>() const;"
- with "explicit operator bool() const;"
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 66
-
- <td width="75">
- <p align="left">27.4.4.3
-
- <td width="31">
- <p align="left">1<sup>st</sup> <font size="2"
- style="font-size: 11pt">para</font>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Switch from
- “unspecified-bool-type” to<span lang=
- "zxx"> “</span>explicit operator bool()
- const”
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Replace "operator <i>unspecified-bool-type</i>() const;"
- with "explicit operator bool() const;"
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>FR 36
-
- <td width="75">
- <p>27.6.1.2.2<br>
- [istream.<br>
- formatted.<br>
- arithmetic]
-
- <td width="31">
- <p>1, 2, and 3
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>iostate err = 0;
-
- <p>
-
- <p>iostate is a bitmask type and
- so could be an enumeration. Probably using
-
- <p>goodbit is the solution.
-
- <p>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>FR 37
-
- <td width="75">
- <p>27.6.1.2.2<br>
- [istream.<br>
- formatted.<br>
- arithmetic]
-
- <td width="31">
- <p>3
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>else if (lval <
- numeric_limits<int>::min()
-
- <p>||
- numeric_limits<int>::max() < lval))
-
- <p>
-
- <p>The parentheses aren't
- balanced.
-
- <p>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 67
-
- <td width="75">
- <p align="left">27.7.1
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- basic_stringbuf dose not use concept.
-
- <td width="466">
- <p align="left">
- Replace “class Allocator” to “Allocator
- Alloc”.
-
- <p align="left">
- Correct as follows.
-
- <p align="left">
- <br>
-
- <p align="left">
- namespace std {
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
-
- <p align="left">
- <u>Allocator Alloc</u> = allocator<charT> >
-
- <p align="left">
- class basic_stringbuf : public
- basic_streambuf<charT,traits> {
-
- <p align="left">
- public:
-
- <p align="left">...
-
- <p align="left">
- <br>
-
- <p align="left">//
- 27.7.1.1 Constructors:
-
- <p align="left">
- explicit basic_stringbuf(ios_base::openmode which
-
- <p align="left">=
- ios_base::in | ios_base::out);
-
- <p align="left">
- explicit basic_stringbuf
-
- <p align="left">
- (const basic_string<charT,traits,<u>Alloc</u>>&
- str,
-
- <p align="left">
- ios_base::openmode which = ios_base::in | ios_base::out);
-
- <p align="left">
- basic_stringbuf(basic_stringbuf&& rhs);
-
- <p align="left">
-
-
- <p align="left">...
-
- <p align="left">
-
-
- <p align="left">
-
-
- <p align="left">//
- 27.7.1.3 Get and set:
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>> str() const;
-
- <p align="left">
- void str(const
- basic_string<charT,traits,<u>Alloc</u>>& s);
-
- <p align="left">
-
-
- <p align="left">...
-
- <p align="left">};
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
-
- <p align="left">
- void swap(basic_stringbuf<charT, traits,
- <u>Alloc</u>>& x,
-
- <p align="left">
- basic_stringbuf<charT, traits, <u>Alloc</u>>& y);
-
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
-
- <p align="left">
- void swap(basic_stringbuf<charT, traits,
- <u>Alloc</u>>&& x,
-
- <p align="left">
- basic_stringbuf<charT, traits, <u>Alloc</u>>& y);
-
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
-
- <p align="left">
- void swap(basic_stringbuf<charT, traits,
- <u>Alloc</u>>& x,
-
- <p align="left">
- basic_stringbuf<charT, traits,
- <u>Alloc</u>>&& y);
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">}
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 68
-
- <td width="75">
- <p align="left">27.7.2
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- basic_istringstream dose not use concept.
-
- <td width="466">
- <p align="left">
- Replace “class Allocator” to “Allocator
- Alloc”.
-
- <p align="left">
- Correct as follows.
-
- <p align="left">
-
-
- <p align="left">
- namespace std {
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
-
- <p align="left">
- <u>Allocator Alloc</u> = allocator<charT> >
-
- <p align="left">
- class basic_istringstream : public
- basic_istream<charT,traits> {
-
- <p align="left">
- public:
-
- <p align="left">
- typedef charT char_type;
-
- <p align="left">
- typedef typename traits::int_type int_type;
-
- <p align="left">
- typedef typename traits::pos_type pos_type;
-
- <p align="left">
- typedef typename traits::off_type off_type;
-
- <p align="left">
- typedef traits traits_type;
-
- <p align="left">
- typedef <u>Alloc</u> allocator_type;
-
- <p align="left">
- <br>
-
- <p align="left">//
- 27.7.2.1 Constructors:
-
- <p align="left">
- explicit basic_istringstream(ios_base::openmode which =
- ios_base::in);
-
- <p align="left">
- explicit basic_istringstream(
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- str,
-
- <p align="left">
- ios_base::openmode which = ios_base::in);
-
- <p align="left">
- basic_istringstream(basic_istringstream&& rhs);
-
- <p align="left">
-
-
- <p align="left">//
- 27.7.2.2 Assign and swap:
-
- <p align="left">
- basic_istringstream&
- operator=(basic_istringstream&& rhs);
-
- <p align="left">
- void swap(basic_istringstream&& rhs);
-
- <p align="left">
-
-
- <p align="left">//
- 27.7.2.3 Members:
-
- <p align="left">
- basic_stringbuf<charT,traits,<u>Alloc</u>>* rdbuf()
- const;
-
- <p align="left">
-
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>> str() const;
-
- <p align="left">
- void str(const
- basic_string<charT,traits,<u>Alloc</u>>& s);
-
- <p align="left">
-
-
- <p align="left">
- private:
-
- <p align="left">//
- basic_stringbuf<charT,traits,<u>Alloc</u>> sb;
- exposition only
-
- <p align="left">};
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
-
- <p align="left">
- void swap(basic_istringstream<charT, traits,
- <u>Alloc</u>>& x,
-
- <p align="left">
- basic_istringstream<charT, traits, <u>Alloc</u>>&
- y);
-
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
-
- <p align="left">
- void swap(basic_istringstream<charT, traits,
- <u>Alloc</u>>&& x,
-
- <p align="left">
- basic_istringstream<charT, traits, <u>Alloc</u>>&
- y);
-
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
-
- <p align="left">
- void swap(basic_istringstream<charT, traits,
- <u>Alloc</u>>& x,
-
- <p align="left">
- basic_istringstream<charT, traits,
- <u>Alloc</u>>&& y);
-
- <p align="left">}
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 69
-
- <td width="75">
- <p align="left">27.7.3
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- basic_ostringstream dose not use concept.
-
- <td width="466">
- <p align="left">
- Replace “class Allocator” to “Allocator
- Alloc”.
-
- <p align="left">
- Correct as follows.
-
- <p align="left">
- <br>
-
- <p align="left">
- namespace std {
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
-
- <p align="left">
- <u>Allocator Alloc</u> = allocator<charT> >
-
- <p align="left">
- class basic_ostringstream : public
- basic_ostream<charT,traits> {
-
- <p align="left">
- public:
-
- <p align="left">//
- types:
-
- <p align="left">
- typedef charT char_type;
-
- <p align="left">
- typedef typename traits::int_type int_type;
-
- <p align="left">
- typedef typename traits::pos_type pos_type;
-
- <p align="left">
- typedef typename traits::off_type off_type;
-
- <p align="left">
- typedef traits traits_type;
-
- <p align="left">
- typedef <u>Alloc</u> allocator_type;
-
- <p align="left">
-
-
- <p align="left">//
- 27.7.3.1 Constructors/destructor:
-
- <p align="left">
- explicit basic_ostringstream(ios_base::openmode which =
- ios_base::out);
-
- <p align="left">
- explicit basic_ostringstream(
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- str,
-
- <p align="left">
- ios_base::openmode which = ios_base::out);
-
- <p align="left">
- basic_ostringstream(basic_ostringstream&& rhs);
-
- <p align="left">
-
-
- <p align="left">//
- 27.7.3.2 Assign/swap:
-
- <p align="left">
- basic_ostringstream&
- operator=(basic_ostringstream&& rhs);
-
- <p align="left">
- void swap(basic_ostringstream&& rhs);
-
- <p align="left">
-
-
- <p align="left">//
- 27.7.3.3 Members:
-
- <p align="left">
- basic_stringbuf<charT,traits,<u>Alloc</u>>* rdbuf()
- const;
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>> str() const;
-
- <p align="left">
- void str(const
- basic_string<charT,traits,<u>Alloc</u>>& s);
-
- <p align="left">
- private:
-
- <p align="left">//
- basic_stringbuf<charT,traits,<u>Alloc</u>> sb;
- exposition only
-
- <p align="left">};
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits, <u>Allocator</u>
- <font size="2" style=
- "font-size: 11pt"><u>Alloc</u>></font>
-
- <p align="left">
- void swap(basic_ostringstream<charT, traits,
- <u>Alloc</u>>& x,
-
- <p align="left">
- basic_ostringstream<charT, traits, <u>Alloc</u>>&
- y);
-
- <p align="left">
- template <class charT, class traits, <u>Allocator</u>
- <font size="2" style=
- "font-size: 11pt"><u>Alloc</u>></font>
-
- <p align="left">
- void swap(basic_ostringstream<charT, traits,
- <u>Alloc</u>>&& x,
-
- <p align="left">
- basic_ostringstream<charT, traits, <u>Alloc</u>>&
- y);
-
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
-
- <p align="left">
- void swap(basic_ostringstream<charT, traits,
- <u>Alloc</u>>& x,
-
- <p align="left">
- basic_ostringstream<charT, traits,
- <u>Alloc</u>>&& y);
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">}
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 71
-
- <td width="75">
- <p align="left">27.7.3
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">
- Typo.
-
- <p align="left">"template" is missing in
- "class basic_ostringstream" of the title of the chapter.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- 27.7.3 Class basic_ostringstream
-
- <p align="left">
- <br>
-
- <p align="left">
- should be
-
- <p align="left">
- <br>
-
- <p align="left">27.7.3 Class <u>template</u>
- basic_ostringstream
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 72
-
- <td width="75">
- <p align="left">27.7.4
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- basic_stringstream dose not use concept.
-
- <td width="466">
- <p align="left">
- Replace "class Allocator" to "Allocator Alloc".
-
- <p align="left">
- Correct as follows.
-
- <p align="left">
-
-
- <p align="left">
- namespace std {
-
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
-
- <p align="left">
- <u>Allocator Alloc</u> = allocator<charT> >
-
- <p align="left">
- class basic_stringstream
-
- <p align="left">:
- public basic_iostream<charT,traits> {
-
- <p align="left">
- public:
-
- <p align="left">//
- types:
-
- <p align="left">
- typedef charT char_type;
-
- <p align="left">
- typedef typename traits::int_type int_type;
-
- <p align="left">
- typedef typename traits::pos_type pos_type;
-
- <p align="left">
- typedef typename traits::off_type off_type;
-
- <p align="left">
- typedef traits traits_type;
-
- <p align="left">
- typedef <u>Alloc</u> allocator_type;
-
- <p align="left">
-
-
- <p align="left">//
- constructors/destructor
-
- <p align="left">
- explicit basic_stringstream(
-
- <p align="left">
- ios_base::openmode which = ios_base::out|ios_base::in);
-
- <p align="left">
- explicit basic_stringstream(
-
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- str,
-
- <p align="left">
- ios_base::openmode which = ios_base::out|ios_base::in);
-
- <p align="left">
- basic_stringstream(basic_stringstream&& rhs);
-
- <p align="left">
-
-
- <p align="left">//
- 27.7.5.1 Assign/swap:
-
- <p align="left">
- void swap(basic_stringstream&& rhs);
-
- <p align="left">
-
-
- <p align="left">//
- Members:
-
- <p align="left">
- basic_stringbuf<charT,traits,<u>Alloc</u>>* rdbuf()
- const;
-
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>> str() const;
-
- <p align="left">
- void str(const
- basic_string<charT,traits,<u>Alloc</u>>& str);
-
- <p align="left">
- private:
-
- <p align="left">//
- basic_stringbuf<charT, traits> sb; exposition only
-
- <p align="left">};
-
- <p align="left">
-
-
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
-
- <p align="left">
- void swap(basic_stringstream<charT, traits,
- <u>Alloc</u>>& x,
-
- <p align="left">
- basic_stringstream<charT, traits, <u>Alloc</u>>&
- y);
-
- <p align="left">
- template <class charT, class traits, <u>Allocator</u>
- <font size="2" style=
- "font-size: 11pt"><u>Alloc</u>></font>
-
- <p align="left">
- void swap(basic_stringstream<charT, traits,
- <u>Alloc</u>>&& x,
-
- <p align="left">
- basic_stringstream<charT, traits, <u>Alloc</u>>&
- y);
-
- <p align="left">
- template <class charT, class traits, <u>Allocator</u>
- <font size="2" style=
- "font-size: 11pt"><u>Alloc</u>></font>
-
- <p align="left">
- void swap(basic_stringstream<charT, traits,
- <u>Alloc</u>>& x,
-
- <p align="left">
- basic_stringstream<charT, traits,
- <u>Alloc</u>>&& y);
-
- <p align="left" style="margin-top: 0.04in">}
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 73
-
- <td width="75">
- <p align="left">27.8.1.14
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">It is a problem
- from C++98, fstream cannot appoint a filename of wide
- character string(const wchar_t and const wstring&).
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- interface corresponding to wchar_t, char16_t and char32_t.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 86
-
- <td width="75">
- <p align="left">28
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">ge
-
- <td width="375">
- <p align="left">The
- regular expressions chapter is not concept enabled.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 309
-
- <td width="75">
- <p align="justify">28
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Regular
- expressions cannot be used in constrained templates
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Provide constraints for the regular
- expression library, clause 28
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 310
-
- <td width="75">
- <p align="justify">28
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The regex chapter uses iterators in the old
- pre-concept style, it should be changed to use concepts
- instead.
-
- <td width="466">
- <p align="left">Use concepts for iterator template
- arguments throughout.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 314
-
- <td width="75">
- <p align="justify">28.4
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The swap
- overloads for regex classes are only supplied for l-value
- references. Other sections of the library (eg 21 strings or
- 23 containers) provide two extra overloads taking an
- r-value reference as the first and second argument
- respectively.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add the missing overloads to 28.4 and the
- corresponding later sections in 28 for each swap function.
- We want to accept AMs paper which proposes a single
- overload with two r-value references
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 315
-
- <td width="75">
- <p align="justify">28.4
-
- <td width="31">
- <p align="justify">p6
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">6 Effects:
- string_type str(first, last); return
- use_facet<collate<charT> >(
- getloc()).transform(&*str.begin(), &*str.end()); Is
- it legal to dereference str.end() ?
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Reword to effect clause to use legal
- iterator dereferences
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 316
-
- <td width="75">
- <p align="justify">28.4 ff
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The constructors
- for regex classes do not have an r-value overload.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add the missing r-value constructors to
- regex classes.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 317
-
- <td width="75">
- <p align="justify">28.8
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">basic_string has both a constructor and an
- assignment operator that accepts an initializer list,
- basic_regex should have the same.
-
- <td width="466">
- <p align="left">In the
- basic_regex synopsis, after: basic_regex&
- operator=(const charT* ptr); add: basic_regex&
- operator=(initializer_list<charT> il); And after
- paragraph 20 add: basic_regex&
- operator=(initializer_list<charT> il); Effects:
- returns assign(il.begin(), il.end());
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 74
-
- <td width="75">
- <p align="left">28.8
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">
- “basic_regx & operator=
- (initializer_list<T>);” is not defined.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- basic_regx & operator= (initializer_list<T>);
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 318
-
- <td width="75">
- <p align="justify">28.8.2
-
- <td width="31">
- <p align="justify">para 22
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Constructor
- definition should appear with the other constructors not
- after assignment ops.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Move para 22 to just after para 17.
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 319
-
- <td width="75">
- <p align="justify">28.12.2
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">It was always expected that
- regex_token_iterator would be constructible from an array
- literal: indeed ideally this is the prefered method of
- initializing such an object. However, the best we could do
- in C++0x was: template <std::size_t N>
- regex_token_iterator(BidirectionalIterator a,
- BidirectionalIterator b, const regex_type& re, const
- int (&submatches)[N], regex_constants::match_flag_type
- m = regex_constants::match_default); Now that we have
- initializer_lists we should use them to remove this
- particular wart.
-
- <td width="466">
- <p align="left">To the synopsis
- for regex_token_iterator, after template <std::size_t
- N> regex_token_iterator(BidirectionalIterator a,
- BidirectionalIterator b, const regex_type& re, const
- int (&submatches)[N], regex_constants::match_flag_type
- m = regex_constants::match_default); add
- regex_token_iterator(BidirectionalIterator a,
- BidirectionalIterator b, const regex_type& re,
- initializer_list<int> submatches,
- regex_constants::match_flag_type m =
- regex_constants::match_default); In 28.12.2.1 add the
- declaration: regex_token_iterator(BidirectionalIterator a,
- BidirectionalIterator b, const regex_type& re,
- initializer_list<int> submatches,
- regex_constants::match_flag_type m =
- regex_constants::match_default); And to the end of para 3
- add: The forth constructor initializes the member subs to
- hold a copy of the sequence of integer values in the range
- [submatches.begin(), submatches.end()).
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left"><br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 87
-
- <td width="75">
- <p align="left">29
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">ge
-
- <td width="375">
- <p align="left">The
- atomics chapter is not concept enabled. The adopted paper,
- N2427, did have those concepts.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left">Create an issue for concepts in the atomics chapter. See
- N2427. Needs to also consider issues 923 and 924.<br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 311
-
- <td width="75">
- <p align="justify">29
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Atomic types
- cannot be used generically in a constrained template
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Provide constraints for the atomics
- library, clause 29
-
- <td width="225">
- <p align="left">Duplicate of US 87.<br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 312
-
- <td width="75">
- <p align="justify">29
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The contents of the <stdatomic.h>
- header are not listed anywhere, and <cstdatomic> is
- listed as a C99 header in chapter 17. If we intend to use
- these for compatibility with a future C standard, we should
- not use them now.
-
- <td width="466">
- <p align="left">Remove <cstdatomic> from the C99
- headers in table 14. Add a new header <atomic> to the
- headers in table 13. Update chapter 29 to remove reference
- to <stdatomic.h> and replace the use of
- <cstdatomic> with <atomic>. If and when WG14
- adds atomic operations to C we can add corresponding
- headers to table 14 with a TR.
-
- <td width="225">
- <p align="left">Create an issue. Assigned to Lawrence Crowl. May be
- resolvable with a footnote for clarity stating that the header is
- defined where it exists.<br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 75
-
- <td width="75">
- <p align="left">29
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">A
- definition of enum or struct is the style of C using
- typedef.
-
- <td width="466">
- <p align="left">
- Change to a style of C++.
-
- <p align="left">
- Correct as follows.
-
- <p align="left">
- <br>
-
- <p align="left">
- 29.1
-
- <p align="left">
-
-
- <p align="left">
- namespace std {
-
- <p align="left">
- <u>typedef</u> enum memory_order {
-
- <p align="left">
- memory_order_relaxed, memory_order_consume,
- memory_order_acquire,
-
- <p align="left">
- memory_order_release, memory_order_acq_rel,
- memory_order_seq_cst
-
- <p align="left">}
- memory_order;
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- should be
-
- <p align="left">
- <br>
-
- <p align="left">
- namespace std {
-
- <p align="left">
- enum memory_order {
-
- <p align="left">
- memory_order_relaxed, memory_order_consume,
- memory_order_acquire,
-
- <p align="left">
- memory_order_release, memory_order_acq_rel,
- memory_order_seq_cst
-
- <p align="left">};
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- 29.3.1
-
- <p align="left">
- <br>
-
- <p align="left">
- namespace std {
-
- <p align="left">
- <u>typedef</u> struct atomic_bool {
-
- <p align="left">...
-
- <p align="left">}
- atomic_bool;
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- should be
-
- <p align="left">
- <br>
-
- <p align="left">
- namespace std {
-
- <p align="left">
- struct atomic_bool {
-
- <p align="left">...
-
- <p align="left">};
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- namespace std {
-
- <p align="left">
- <u>typedef</u> struct atomic_<i>itype</i> {
-
- <p align="left">...
-
- <p align="left">}
- atomic_<i>itype</i>;
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- should be
-
- <p align="left">
- <br>
-
- <p align="left">
- namespace std {
-
- <p align="left">
- struct atomic_<i>itype</i> {
-
- <p align="left">...
-
- <p align="left">};
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- 29.3.2
-
- <p align="left">
- <br>
-
- <p align="left">
- namespace std {
-
- <p align="left">
- <u>typedef</u> struct atomic_address {
-
- <p align="left">...
-
- <p align="left">}
- atomic_address;
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- should be
-
- <p align="left">
- <br>
-
- <p align="left">
- namespace std {
-
- <p align="left">
- struct atomic_address {
-
- <p align="left">...
-
- <p align="left">};
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- 29.5
-
- <p align="left">
- <br>
-
- <p align="left">
- namespace std {
-
- <p align="left">
- <u>typedef</u> struct atomic_flag {
-
- <p align="left">...
-
- <p align="left">}
- atomic_flag;
-
- <p align="left">}
-
- <p align="left">
- <br>
-
- <p align="left">
- should be
-
- <p align="left">
- <br>
-
- <p align="left">
- namespace std {
-
- <p align="left">
- struct atomic_flag {
-
- <p align="left">...
-
- <p align="left">};
-
- <p align="left">}
-
- <td width="225">
- <p align="left">Recommend to reject the comment: We believe the current
- syntax is most appropriate for an interface that is intended to be
- highly compatible with C.<br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 313
-
- <td width="75">
- <p align="justify">29.1
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">seq_cst fences don't necessarily guarantee
- ordering
- http://home.twcny.rr.com/hinnant/cpp_extensions/issues_preview/lwg-active.html#926
-
- <td width="466">
- <p align="left">Add a new
- paragraph after 29.1 [atomics.order]p5 that says For atomic
- operations A and B on an atomic object M, where A and B
- modify M, if there are memory_order_seq_cst fences X and Y
- such that A is sequenced before X, Y is sequenced before B,
- and X precedes Y in S, then B occurs later than A in the
- modifiction order of M.
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left">Hans to make proposal. See LWG Issue 926.<br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 88
-
- <td width="75">
- <p align="left">29.2
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">The "lockfree" facilities do
- not tell the programmer enough.
-
- <td width="466">
- <p align="left">
- Expand the "lockfree" facilities. See the attached paper
- "Issues with the C++ Standard" under Chapter 29,
- "atomics.lockfree doesn't tell the programmer enough"
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left">Create an issue, will require more discussion. Assigned
- to Lawrence. Description of issue should be based on what is in the
- additional notes for US 88.<br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 89
-
- <td width="75">
- <p align="left">29.3.1
-
- <td width="31">
- <p align="left">Table 122
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">The
- types in the table "Atomics for standard typedef types"
- should be typedefs, not classes. These semantics are
- necessary for compatibility with C.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Change the classes to
- typedefs.
-
- <td width="225">
- <p align="left">LWG Issue 937. Direct the editor to turn the types into
- typedefs as proposed in the comment. Paper approved by committee used
- typedefs, this appears to have been introduced as an editorial change.
- Rationale: for compatibility with C.<tr valign="top">
- <td width="29">
- <p align="left">US 90
-
- <td width="75">
- <p align="left">29.4
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">Are atomic functions allowed
- to have non-volatile overloads?
-
- <td width="466">
- <p align="left">
- Allow non-volatile overloads. See the attached paper
- "Issues with the C++ Standard, under Chapter 29, "Are
- atomic functions allowed to have non-volatile overloads?"
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left">Create an issue. Assigned to Lawrence Crowl. Should
- explicitly consider the process shared issue.<br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 91
-
- <td width="75">
- <p align="left">29.4
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">Whether or not a failed
- compare_exchange is a RMW operation (as used in 1.10
- [intro.multithread]) is unclear.
-
- <td width="466">
- <p align="left">
- Make failing compare_exchange operations <font size="2"
- style="font-size: 11pt"><strong>not</strong> be RMW. See
- the attached paper under "atomic RMW status of failed
- compare_exchange"</font>
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left">Create an issue, goes to review. Attention: Howard.
- Group agrees with the resolution as proposed by Anthony Williams in the
- attached note.<br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 92
-
- <td width="75">
- <p align="left">29.4
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">te
-
- <td width="375">
- <p align="left">The effect of
- memory_order_consume with atomic RMW operations is unclear.
-
- <td width="466">
- <p align="left">
- Follow the lead of fences [atomics.fences], and promote
- memory_order_consume to memory_order_acquire with RMW
- operations.
-
- <p align="left"><br>
-
- <td width="225">
- <p align="left">Create an issue. Assigned to Lawrence. Resolution
- requires proposed wording.<br>
-
- <tr valign="top">
- <td width="29">
- <p>JP 76
-
- <td width="75">
- <p align="left">30
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">A
- description for "<i>Throws:</i> Nothing." are not unified.
-
- <p align="left" style="margin-top: 0.04in">At
- the part without throw, "<i>Throws:</i> Nothing." should be
- described.
-
- <td width="466">
- <p align="left">Add
- "<i>Throws:</i> Nothing." to the following.
-
- <p align="left">
- 30.2.1.6 , 1<sup>st</sup> <font size="2" style=
- "font-size: 11pt">paragraph</font>
-
- <p align="left">
- 30.3.3.1 , 4<sup>th</sup> <font size="2" style=
- "font-size: 11pt">paragraph</font>
-
- <p align="left">
- 30.3.3.2.1 , 6<sup>th</sup> <font size="2" style=
- "font-size: 11pt">paragraph</font>
-
- <p align="left">
- 30.4.1 , 7<sup>th</sup> <font size="2" style=
- "font-size: 11pt">and 8<sup>th</sup> paragraph</font>
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">30.4.2 ,
- 6<sup>th</sup><font size="2" style="font-size: 11pt">,
- 7<sup>th</sup>,19<sup>th</sup>,21th and 25<sup>th</sup>
- paragraph</font>
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p align="left">Pass on to editor.<br>
-
- <tr valign="top">
- <td width="29">
- <p align="left">US 93
-
- <td width="75">
- <p align="left">30
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left">ge
-
- <td width="375">
- <p align="left">The
- thread chapter is not concept enabled.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left"><br>
-
- <td width="225">
- <p align="left">Create an issue. Need to find volunteers to work on
- this.<br>
-
- <tr valign="top">
- <td width="29">
- <p align="justify" style=
- "margin-right: -0.18in; margin-bottom: 0in">UK<br>
- 320
-
- <p>
-
- <td width="75">
- <p align="justify">30
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Threads library cannot be used in
- constrained templates
-
- <td width="466">
- <p align="left">Provide constraints for the threads
- library, clause 30
-
- <td width="225">
- <p align="left">Duplicate of US 93.<br>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 321
-
- <td width="75">
- <p align="justify">30
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">Throughout this
- clause, the term Requires: is used to introduce compile
- time requirements, which we expect to be replaced with
- concepts and requires in code. Run-time preconditions are
- introduced with the term "Preconditions:" which is not a
- defined part of the library documentation structure
- (17.5.2.4). However, this is exactly the direction that BSI
- would like to see the organisation move, replacing
- Requires: clauses with Preconditions: clasues throught the
- library. See comment against clause 17 for more details.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Decument Preconditions: paragraphs in
- 17.5.2.4, and use consistently through rest of the library.
-
- <td width="225">
- <p align="left">Pass on to editor.<br>
-
- <tr valign="top">
- <td width="29">
- <p>US 94
-
- <td width="75">
- <p>30.1.2
-
- <td width="31">
- <p>1
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>The first sentence of para 1 suggests that no other
- library function is permitted to call operating system or
- low level APIs.
-
- <td width="466">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Rewrite para 1
- as: “ <font color="#000000">Some functions described
- in this Clause are specified to throw exceptions of type
- system_error (</font><font color="#0000FF">19.4.5</font>
- <font color="#000000">). Such exceptions shall be thrown if
- a call to an operating system or underlying API results in
- an error that prevents the library function from satisfying
- its postconditions or from returning a meaningful
- value.”</font>
-
- <p>
-
- <td width="225">
- <p>
-
- Reclassify as editorial. Pass on to editor, wording roughly as proposed.<tr valign="top">
- <td width="29">
- <p>US 95
-
- <td width="75">
- <p>30.1.3
-
- <td width="31">
- <p>1
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>“native_handle_type” is a typedef, not a
- class member.
-
- <td width="466">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Several classes
- described in this Clause have a member native_handle (of
- type native_handle_type) . The
-
- <p align="left">
- presence of this member and its semantics is implementation
- defined. [ Note: This member allows implementations to
- provide access to implementation details. The name of the
- member and the type are specified to facilitate portable
- compile-time detection. Actual use of this member or the
- corresponding type is inherently non-portable. —end
- note ]
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Not a defect. native_handle_type is a typedef, but it is also a member of
- the classes in question.<tr valign="top">
- <td width="29">
- <p>US 96
-
- <td width="75">
- <p>30.1.4
-
- <td width="31">
- <p>2
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>There is no definition here for monotonic clock.
-
- <td width="466">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Implementations
- should use a <i>monotonic clock</i> to measure time for
- these functions. A monotonic clock measures real time, but
- cannot be set, and is guaranteed to have no negative clock
- jumps.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Create an issue, together with UK 322. Detlef will write the issue, but not
- proposed wording. Refer also to sections [time.clock.req] and [time.clock.monotonic].<tr valign="top">
- <td width="29">
- <p>UK<br>
- 322
-
- <td width="75">
- <p align="justify">30.1.4
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Not all systms
- can provide a monotonic clock. How are they expected to
- treat a _for function?
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add at least a note explaining the intent
- for systems that do not support a monotonic clock.
-
- <td width="225">
- <p>
-
- Create an issue, together with UK 96. Note that the specification as is
- already allows a non-monotonic clock due to the word "should" rather than
- "shall". If this wording is kept, a footnote should be added to make the
- meaning clear.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 323
-
- <td width="75">
- <p align="justify">30.2.1
-
- <td width="31">
- <p align="justify">1
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The presence of
- a non-explicit variadic template constructor alongside an
- explicit single-argument constructor can lead to behaviour
- that is not intended: the variadic constructor will be
- selected for implicit conversions, defeating the purpose of
- the explicit single-argument constructor. Additionally the
- single-argument constructor is redundant; the variadic
- constructor can provide identical functionality with one
- *fewer* copies if the supplied func is an lvalue.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Mark constructor template <class F,
- class ...Args> thread(F&& f, Args&&...
- args); as explicit and remove the single-argument
- constructor.
-
- <td width="225">
- <p>
-
- Create an issue, goes to review. Attention: Howard. Group agrees with the
- proposed resolution.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 324
-
- <td width="75">
- <p align="justify">30.2.1.1
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">thread::id
- objects should be as useable in hashing containers as they
- are in ordered associative containers.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add thread::id
- support for std::hash
-
- <p align="left"><br>
-
- <p align="left"><br>
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Not a defect. See [unord.hash], where std::thread:id is already listed as a
- required specialization for std::hash().<tr valign="top">
- <td width="29">
- <p>JP 77
-
- <td width="75">
- <p align="left">30.2.1.2
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">
- "CopyConstructible" and "MoveConstructible" in
- "<i>Requires:</i> F and each Ti in Args shall be
- CopyConstructible if an lvalue and otherwise
- MoveConstructible." are reflected by interface.
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">Add
- a concept for constructor of thread.
-
- <td width="225">
- <p>
-
- Subset of US 93. Should be addressed under the issue corresponding to US 93.<tr valign="top">
- <td width="29">
- <p>JP 78
-
- <td width="75">
- <p align="left">30.2.1.2
-
- <td width="31">
- <p align="left">
- 4<sup>th</sup> <font size="2" style=
- "font-size: 11pt">para, 1<sup>st</sup> line</font>
-
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">In
- "F and each Ti in Args", 'Ti' is not clear.
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Replace "Ti" with "args"
-
- <td width="225">
- <p>
-
- Pass on to editor.<tr valign="top">
- <td width="29">
- <p>US 97
-
- <td width="75">
- <p>30.2.1.3
-
- <td width="31">
- <p>1
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p>detach-on-destruction may result in
- “escaped” threads accessing objects with
- bounded lifetime after the end of their lifetime.
-
- <td width="466">
- <p>See document WG21 N2802=08-0312 written by Hans Boehm.
-
- <td width="225">
- <p>
-
- Create an issue. To be discussed in full library group.<tr valign="top">
- <td width="29">
- <p align="left">US 98
-
- <td width="75">
- <p align="left">30.2.1.3,<br>
- 30.2.1.4
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p align="left"><br>
-
- <td width="375">
- <p align="left">The current defined behavior
- for the std::thread destructor is to detach the thread.
- Unfortunately, this behavior exposes programmers to tricky,
- hard-to-diagnose, undefined behavior.
-
- <td width="466">
- <p align="left">
- Change destruction behavior to undefined behavior, with a
- note strongly encouraging termination. See the attached
- paper "Issues with the C++ Standard" under Chapter 30,
- "Implicit thread detach is harmful".
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Duplicate of US 97.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 325
-
- <td width="75">
- <p align="justify">30.3.3
-
- <td width="31">
- <p align="justify">2
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">We believe constexpr literal values should
- be a more natural expression of empty tag types than extern
- objects as it should improve the compilers ability to
- optimize the empty object away completely.
-
- <td width="466">
- <p align="left">Replace the
- extern declarations: extern const defer_lock_t defer_lock;
- extern const try_to_lock_t try_to_lock; extern const
- adopt_lock_t adopt_lock; with constexpr values constexpr
- defer_lock_t defer_lock{}; constexpr try_to_lock_t
- try_to_lock{}; constexpr adopt_lock_t adopt_lock{};
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Create an issue. Move to review, attention: Howard. The current
- specification is a "hack", and the proposed specification is a better
- "hack".<tr valign="top">
- <td width="29">
- <p>UK<br>
- 326
-
- <td width="75">
- <p align="justify">30.3.3.2.1
-
- <td width="31">
- <p align="justify">7
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The precondition
- that the mutex is not owned by this thread offers
- introduces the risk of un-necessary undefined behaviour
- into the program. The only time it matters whether the
- current thread owns the mutex is in the lock operation, and
- that will happen subsequent to construction in this case.
- The lock operation has the identical pre-condition, so
- there is nothing gained by asserting that precondition
- earlier and denying the program the right to get into a
- valid state before calling lock.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Strike 30.3.3.2.1p7
-
- <td width="225">
- <p>
-
- Create an issue. Move to review, attention: Howard. Proposed resolution is
- fine.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 327
-
- <td width="75">
- <p align="justify">30.3.3.2.2
-
- <td width="31">
- <p align="justify">4, 9, 14, 19
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Not clear what
- the specification for error condition
- resource_deadlock_would_occur means. It is perfectly
- possible for this thread to own the mutex without setting
- owns to true on this specific lock object. It is also
- possible for lock operations to succeed even if the thread
- does own the mutex, if the mutex is recursive. Likewise, if
- the mutex is not recursive and the mutex has been locked
- externally, it is not always possible to know that this
- error condition should be raised, depending on the host
- operating system facilities. It is possible that 'i.e.' was
- supposed to be 'e.g.' and that suggests that recursive
- locks are not allowed. That makes sense, as the
- exposition-only member owns is boolean and not a integer to
- count recursive locks.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add a precondition !owns. Change the 'i.e.'
- in the error condition to be 'e.g.' to allow for this
- condition to propogate deadlock detection by the host OS.
-
- <td width="225">
- <p>
-
- Create an issue. Assigned to Lawrence Crowl. Note: not sure what try_lock
- means for recursive locks when you are the owner. POSIX has language on
- this, which should ideally be followed. Proposed fix is not quite right, for
- example, try_lock should have different wording from lock.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 328
-
- <td width="75">
- <p align="justify">30.3.3.2.2
-
- <td width="31">
- <p align="justify">20
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">There is a missing precondition that owns
- is true, or an if(owns) test is missing from the effect
- clause
-
- <td width="466">
- <p align="left">Add a
- precondition that owns == true. Add an error condition to
- detect a violation, rather than yield undefined behaviour.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Handle in same issue as UK 327. Also uncertain that the proposed resolution
- is the correct one.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 329
-
- <td width="75">
- <p align="justify">30.5
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">future, promise and packaged_task provide a
- framework for creating future values, but a simple function
- to tie all three components together is missing. Note that
- we only need a *simple* facility for C++0x. Advanced thread
- pools are to be left for TR2.
-
- <td width="466">
- <p align="left">Provide a simple
- function along the lines of: template< typename F,
- typename ... Args > requires Callable< F, Args...
- > future< Callable::result_type > async(
- F&& f, Args && ... ); Semantics are similar
- to creating a thread object with a packaged_task invoking f
- with forward<Args>(args...) but details are left
- unspecified to allow different scheduling and thread
- spawning implementations. It is unspecified whether a task
- submitted to async is run on its own thread or a thread
- previously used for another async task. If a call to async
- succeeds, it shall be safe to wait for it from any thread.
- The state of thread_local variables shall be preserved
- during async calls. No two incomplete async tasks shall see
- the same value of this_thread::get_id(). [Note: this
- effectively forces new tasks to be run on a new thread, or
- a fixed-size pool with no queue. If the library is unable
- to spawn a new thread or there are no free worker threads
- then the async call should fail.]
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Not a defect. This class of feature has been rejected by the committee as a
- whole multiple times.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 330
-
- <td width="75">
- <p align="justify">30.5.1
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">30.5.1 (and then 30.5.7) refer to a
- specialisation of
- constructible_with_allocator_prefix<> However this
- trait is not in the CD, so references to it should be
- removed.
-
- <td width="466">
- <p align="left">Remove the
- reference to constructible_with_allocator_prefix in 30.5.1
- Remove paragraph 30.5.7
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Related to JP 79 and therefore subset of US 93. Should be addressed under
- the issue corresponding to US 93.<tr valign="top">
- <td width="29">
- <p>JP 79
-
- <td width="75">
- <p align="left">30.5.1
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">The
- concept of UsesAllocator and Allocator should be used.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
-
-
- <p align="left">
- template <class R, class Alloc>
-
- <p align="left">
- struct uses_allocator<promise<R>, Alloc>;
-
- <p align="left">
- template <class R>
-
- <p align="left">
- struct
- constructible_with_allocator_prefix<promise<R>
- >;
-
- <p align="left">
-
-
- <p align="left">
- should be
-
- <p align="left">
-
-
- <p align="left">
- template<class R, Allocator Alloc>
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">concept_map
- UsesAllocator<promise<R>, Alloc>;
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="225">
- <p>
-
- Subset of US 93. Should be addressed under the issue corresponding to US 93.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 331
-
- <td width="75">
- <p align="justify">30.5.3
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Not clear what
- it means for a public constructor to be 'exposition only'.
- If the intent is purely to support the library calling this
- constructor then it can be made private and accessed
- through friendship. Otherwise it should be documented for
- public consumption.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Declare the constructor as private with a
- note about intended friendship, or remove the
- exposition-only comment and document the semantics.
-
- <td width="225">
- <p>
-
- Create an issue. Assigned to Detlef. Suggested resolution probably makes
- sense.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 332
-
- <td width="75">
- <p align="justify">30.5.4
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ed
-
- <td width="375">
- <p align="left">It is not clear
- without reference to the original proposal how to use a
- future. In particular, the only way for the user to
- construct a future is via the promise API which is
- documented after the presentation of future. Most library
- clauses feature a small description of their components and
- intended use, it would be most useful in this case.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Provide a small introductory paragraph,
- docuenting intended purpose of the future class template
- and the way futures can only be created via the promise
- API.
-
- <td width="225">
- <p>
-
- Pass on to editor. Detlef has volunteered to provide some wording.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 333
-
- <td width="75">
- <p align="justify">30.5.4
-
- <td width="31">
- <p align="justify">5
-
- <td width="38">
- <p align="justify">Ge
-
- <td width="375">
- <p align="left">We expect the complicated 3-signature
- specifcation for future::get() to be simplified to a single
- signature with a requires clause by the application of
- concepts.
-
- <td width="466">
- <p align="left">Requires fully baked concepts for clause 30
-
- <td width="225">
- <p>
-
- Subset of US 93. Should be addressed under the issue corresponding to US 93.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 334
-
- <td width="75">
- <p align="justify">30.5.4
-
- <td width="31">
- <p align="justify">5
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Behaviour of
- get() is undefined if calling get() while not is_ready().
- The intent is that get() is a blocking call, and will wait
- for the future to become ready.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Effects: If is_ready() would return false,
- block on the asynchronous result associated with *this.
-
- <td width="225">
- <p>
-
- Create an issue. Move to review, attention: Howard. Proposed resolution is
- fine.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 335
-
- <td width="75">
- <p align="justify">30.5.4
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">
- std::unique_future is MoveConstructible, so you can
- transfer the association with an asynchronous result from
- one instance to another. However, there is no way to
- determine whether or not an instance has been moved from,
- and therefore whether or not it is safe to wait for it.
- std::promise<int> p; std::unique_future<int>
- uf(p.get_future()); std::unique_future<int>
- uf2(std::move(uf)); uf.wait(); // oops, uf has no result to
- wait for.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add a "waitable()" function to
- unique_future (and shared_future) akin to
- std::thread::joinable(), which returns true if there is an
- associated result to wait for (whether or not it is ready).
- Then we can say: if(uf.waitable()) uf.wait();
-
- <td width="225">
- <p>
-
- Create an issue. Requires input from Howard. Probably NAD.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 336
-
- <td width="75">
- <p align="justify">30.5.4
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">It is possible
- to transfer ownership of the asynchronous result from one
- unique_future instance to another via the move-constructor.
- However, it is not possible to transfer it back, and nor is
- it possible to create a default-constructed unique_future
- instance to use as a later move target. This unduly limits
- the use of unique_future in code. Also, the lack of a
- move-assignment operator restricts the use of unique_future
- in containers such as std::vector - vector::insert requires
- move-assignable for example.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add a default constructor with the
- semantics that it creates a unique_future with no
- associated asynchronous result. Add a move-assignment
- operator which transfers ownership.
-
- <td width="225">
- <p>
-
- Create an issue. Detlef will look into it.<tr valign="top">
- <td width="29">
- <p>JP 80
-
- <td width="75">
- <p align="left">30.5.4 ,<br>
- 30.5.5
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left">
- Typo, duplicated ">"
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">"class
- Period>>"
-
- <p align="left" style="margin-top: 0.04in">
- <br>
-
- <td width="466">
- <p align="left" style="margin-top: 0.04in">
- Remove one
-
- <td width="225">
- <p>
-
- Pass on to editor.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 337
-
- <td width="75">
- <p align="justify">30.5.5
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">shared_future
- should support an efficient move constructor that can avoid
- unnecessary manipulation of a reference count, much like
- shared_ptr
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add a move constructor
-
- <td width="225">
- <p>
-
- Create an issue. Detlef will look into it.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 338
-
- <td width="75">
- <p align="justify">30.5.5
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">shared_future is currently
- CopyConstructible, but not CopyAssignable. This is
- inconsistent with shared_ptr, and will surprise users.
- Users will then write work-arounds to provide this
- behaviour. We should provide it simply and efficiently as
- part of shared_future. Note that since the shared_future
- member functions for accessing the state are all declared
- const, the original usage of an immutable shared_future
- value that can be freely copied by multiple threads can be
- retained by declaring such an instance as "const
- shared_future".
-
- <td width="466">
- <p align="left">Remove "=delete"
- from the copy-assignment operator of shared_future. Add a
- move-constructor shared_future(shared_future&&
- rhs), and a move-assignment operator shared_future&
- operator=(shared_future&& rhs). The postcondition
- for the copy-assignment operator is that *this has the same
- associated state as rhs. The postcondition for the
- move-constructor and move assignment is that *this has the
- same associated as rhs had before the
- constructor/assignment call and that rhs has no associated
- state.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Create an issue. Detlef will look into it.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 339
-
- <td width="75">
- <p align="justify">30.5.6
-
- <td width="31">
- <p align="justify">6, 7
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">Move assignment is goiing in the wrong
- direction, assigning from *this to the passed rvalue, and
- then returning a reference to an unusable *this
-
- <td width="466">
- <p align="left">Strike 6. 7
- Postcondition: associated state of *this is the same as the
- associated state of rhs before the call. rhs has no
- associated state.
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Create an issue. Move to review, attention: Howard. Proposed resolution is
- fine.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 340
-
- <td width="75">
- <p align="justify">30.5.6
-
- <td width="31">
- <p align="justify">11, 12, 13
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">There is an
- implied postcondition that the state of the promise is
- transferred into the future leaving the promise with no
- associated state. It should be spelled out.
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Postcondition: *this has no associated
- state.
-
- <td width="225">
- <p>
-
- Create an issue. Move to review, attention: Howard. Proposed resolution is
- fine.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 341
-
- <td width="75">
- <p align="justify">30.5.6
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">promise::swap accepts its parameter by
- lvalue reference. This is inconsistent with other types
- that provide a swap member function, where those swap
- functions accept an rvalue reference
-
- <td width="466">
- <p align="left">Change promise::swap to take an rvalue
- reference.
-
- <td width="225">
- <p>
-
- Create an issue. Detlef will look into it. Probably ready as it.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 342
-
- <td width="75">
- <p align="justify">30.5.6
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">std::promise is
- missing a non-member overload of swap. This is inconsistent
- with other types that provide a swap member function
-
- <p align="left"><br>
-
- <td width="466">
- <p align="left">Add a non-member overload void
- swap(promise&& x,promise&& y){ x.swap(y); }
-
- <td width="225">
- <p>
-
- Create an issue. Move to review, attention: Howard. Detlef will also look
- into it.<tr valign="top">
- <td width="29">
- <p>UK<br>
- 343
-
- <td width="75">
- <p align="justify">30.5.6
-
- <td width="31">
- <p align="justify">3
-
- <td width="38">
- <p align="justify">Te
-
- <td width="375">
- <p align="left">The move constructor of a std::promise
- object does not need to allocate any memory, so the
- move-construct-with-allocator overload of the constructor
- is superfluous.
-
- <td width="466">
- <p align="left">Remove the
- constructor with the signature template <class
- Allocator> promise(allocator_arg_t, const Allocator&
- a, promise& rhs);
-
- <p align="left"><br>
-
- <td width="225">
- <p>
-
- Create an issue. Detlef will look into it. Will solicit feedback from Pablo.
- Note that "rhs" argument should also be an rvalue reference in any case.<tr valign="top">
- <td width="29">
- <p>JP 81
-
- <td width="75">
- <p align="left">30.5.8
-
- <td width="31">
- <p align="left"><br>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p align="left" style="margin-top: 0.04in">
- There are not requirements for F and a concept of Allocator
- dose not use.
-
- <td width="466">
- <p align="left">
- Correct as follows.
-
- <p align="left">
- <br>
-
- <p align="left">
- template <class F>
-
- <p align="left">
- explicit packaged_task(F f);
-
- <p align="left">
- template <class F, class Allocator>
-
- <p align="left">
- explicit packaged_task(allocator_arg_t, const
- Allocator& a, F f);
-
- <p align="left">
- template <class F>
-
- <p align="left">
- explicit packaged_task(F&& f);
-
- <p align="left">
- template <class F, class Allocator>
-
- <p align="left">
- explicit packaged_task(allocator_arg_t, const
- Allocator& a, F&& f);
-
- <p align="left">
-
-
- <p align="left">
- should be
-
- <p align="left">
-
-
- <p align="left">
- template <class F>
-
- <p align="left">
- <u>requires CopyConstructible<F> &&
- Callable<F, ArgTypes...></u>
-
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
-
- <p align="left">
- explicit packaged_task(F f);
-
- <p align="left">
-
-
- <p align="left">
- template <class F, <u>Allocator Alloc</u>>
-
- <p align="left">
- <u>requires CopyConstructible<F> &&
- Callable<F, ArgTypes...></u>
-
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
-
- <p align="left">
- explicit packaged_task(allocator_arg_t, const
- <u>Alloc</u>& a, F f);
-
- <p align="left">
-
-
- <p align="left">
- template <class F>
-
- <p align="left">
- <u>requires CopyConstructible<F> &&
- Callable<F, ArgTypes...></u>
-
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
-
- <p align="left">
- explicit packaged_task(F&& f);
-
- <p align="left">
-
-
- <p align="left">
- template <class F, <u>Allocator Alloc</u>>
-
- <p align="left">
- <u>requires CopyConstructible<F> &&
- Callable<F, ArgTypes...></u>
-
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
-
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">explicit
- packaged_task(allocator_arg_t, const <u>Alloc</u>& a,
- F&& f);
-
- <td width="225">
- <p>
-
- Subset of US 93. Should be addressed under the issue corresponding to US 93.
- We do not consider this to be an editorial change.<tr valign="top">
- <td width="29">
- <p>DE-23
-
- <td width="75">
- <p>Annex B
-
- <td width="31">
- <p>p2
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">DE-23 Recursive
- use of constexpr functions appears to be permitted. Since
- such functions may be required to be evaluated at
- compile-time, Annex B "implementation quantities" should
- specify a maximum depth of recursion.
-
- <td width="466">
- <p>In Annex B, specify a recursion depth of 256 or a larger
- value.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>DE-24
-
- <td width="75">
- <p>Annex B
-
- <td width="31">
- <p>p2
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">DE-24 The
- number of placeholders for "bind" is implementation-defined
- in 20.7.12.1.4, but no minimum is suggested in Annex B.<br>
-
- <td width="466">
- <p>Add a miminum of 10 placeholders to Annex B.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>DE-25
-
- <td width="75">
- <p>Annex B
-
- <td width="31">
- <p>p2
-
- <td width="38">
- <p>te
-
- <td width="375">
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">DE-25
- Specifying a minimum of 17 recursively nested template
- instantiations is too small for practical purposes. The
- limit is too high to effectively limit compiler resource
- usage, see
- http://ubiety.uwaterloo.ca/~tveldhui/papers/2003/turing.pdf
- . The conclusion is that the metric "number of recursively
- nested template instantiations" is inapposite.
-
- <td width="466">
- <p>Remove the bullet "Recursively nested template
- instantiations [17]".
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>FR 38
-
- <td width="75">
- <p>C.2<br>
- [diffs.library]
-
- <td width="31">
- <p>1
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>What is ISO/IEC 1990:9899/DAM
- 1? My guess is that's a typo for ISO/IEC
-
- <p>9899/Amd.1:1995 which I'd
- have expected to be referenced here (the tables
-
- <p>make reference to things
- which were introduced by Amd.1).
-
- <td width="466">
- <p>One need probably a reference
- to the document which introduce char16_t and
-
- <p>char32_t in C (ISO/IEC TR 19769:2004?).
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>UK<br>
- 344
-
- <td width="75">
- <p align="justify">Appendix D
-
- <td width="31">
- <p align="justify"><br>
-
- <td width="38">
- <p align="justify">Ge
-
- <td width="375">
- <p align="left">It is desirable to allow some mechanism to
- support phasing out of deprecated features in the future.
- Allowing compilers to implement a mode where deprecated
- features are not available is a good first step.
-
- <td width="466">
- <p align="left">Add to the definition of deprecated
- features permission for compilers to maintain a
- conditionally supported mode where deprecated features can
- be disabled, so long as they also default to a mode where
- all deprecated features are supported.
-
- <td width="225">
- <p>
-
- <tr valign="top">
- <td width="29">
- <p>FR 39
-
- <td width="75">
- <p>Index
-
- <td width="31">
- <p>
-
- <td width="38">
- <p>ed
-
- <td width="375">
- <p>Some definitions seem not
- indexed (such as /trivially copyable/ or
-
- <p>/sequenced before/), indexing
- them would be useful (and marking specially the page -- say
- bold or italic -- which reference to the definition would
- increase the usefulness; having a separate index of all
- definitions is something which could also be considered).
-
- <td width="466">
- <p>
-
- <td width="225">
- <p>
-
- </table><hr>
\ No newline at end of file
Modified: sandbox/committee/LWG/LWG_0xCD1_status.html
==============================================================================
--- sandbox/committee/LWG/LWG_0xCD1_status.html (original)
+++ sandbox/committee/LWG/LWG_0xCD1_status.html 2009-03-04 14:25:42 EST (Wed, 04 Mar 2009)
@@ -21,7 +21,7 @@
<h1>Library Working Group<br>
Status of CD1 National Body Comments</h1>
<p>Revised:
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %b %Y %I:%M:%S %p %Z" startspan -->04 Mar 2009 07:09:12 AM -0500<!--webbot bot="Timestamp" endspan i-checksum="41446" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %b %Y %I:%M:%S %p %Z" startspan -->04 Mar 2009 01:40:40 PM -0500<!--webbot bot="Timestamp" endspan i-checksum="42233" --></p>
<table border="1" bordercolor="#000000" cellpadding="7"
cellspacing="0" style="border-collapse: collapse">
@@ -100,7 +100,7 @@
<td>
<p>General<br>
- Comment
+ Comment
<td>
<p>Library
@@ -1743,8 +1743,9 @@
166
<td>
- <p align="justify">17.5.3.2.4.1,<br>
- 17.5.3.3
+ <p align="justify">17.5.3.<br>
+ 2.4.1,<br>
+ 17.5.3.3
<p align="justify"><br>
@@ -1856,7 +1857,7 @@
<td>
<p>
- Bill Plaugher to open issue. If the wording is too broad we need to add an
+ Bill Plauger to open issue. If the wording is too broad we need to add an
exception to the standard C library.<tr valign="top">
<td>
<p>UK<br>
@@ -2667,7 +2668,8 @@
<td>
<p>
- <tr valign="top">
+ Straw polls: pointer safety: 9-1-10; threading: 14-2-9. Jens will open
+ multiple issues.<tr valign="top">
<td>
<p>UK<br>
186
@@ -2724,7 +2726,7 @@
<td>
<p>
- <tr valign="top">
+ Lawrence Crowl will open an issue.<tr valign="top">
<td>
<p>UK<br>
188
@@ -2752,7 +2754,7 @@
<td>
<p>
- agreed. Bill Plauger will open an issue.<tr valign="top">
+ Agreed. Bill Plauger will open an issue.<tr valign="top">
<td>
<p>UK<br>
189
@@ -2782,7 +2784,7 @@
<td>
<p>
- agreed. Howard will open an issue.<tr valign="top">
+ Agreed. Howard will open an issue.<tr valign="top">
<td>
<p>JP 27
@@ -3784,7 +3786,8 @@
<p align="justify">20.5
[meta.<br>
- trans.other]<td>
+ trans.<br>
+ other]<td>
<p align="justify">Table 41
<td>
@@ -3805,7 +3808,7 @@
<td>
<p>
- Agree. The need for aligned_union is compelling enough to reinstate.<tr valign="top">
+ Agree. The need for aligned_union is compelling enough to reinstate.<tr valign="top">
<td>
<p>US 69
@@ -4034,7 +4037,8 @@
<td>
<p>20.6.7 [meta.<br>
- trans.other]<td>
+ trans.<br>
+ other]<td>
<p>Table 51, last row, column 3
<td>
@@ -4112,7 +4116,9 @@
<p>JP 38
<td valign="top">
- <p align="left">20.6.12.1.3 [func.bind.<br>
+ <p align="left">20.6.12.<br>
+ 1.3 [func.<br>
+ bind.<br>
bind]<td valign="top">
<p align="left"><br>
@@ -4178,7 +4184,8 @@
<p>DE-21
<td valign="top">
- <p>20.6.12.1.3 [func.bind.<br>
+ <p>20.6.12.<br>
+ 1.3 [func.bind.<br>
bind]<td valign="top">
<p>
@@ -4206,8 +4213,11 @@
211
<td valign="top">
- <p align="justify">20.6.12.2.3 [unique.ptr.<br>
- single.asgn]<td valign="top">
+ <p align="justify">20.6.12.<br>
+ 2.3 [unique.<br>
+ ptr.<br>
+ single.<br>
+ asgn]<td valign="top">
<p align="justify">11
<td valign="top">
@@ -4270,7 +4280,8 @@
<p>DE-22
<td valign="top">
- <p>20.6.16.2 [func.wrap.<br>
+ <p>20.6.16.2 [func.<br>
+ wrap.<br>
func]<td valign="top">
<p>
@@ -5165,7 +5176,8 @@
<td>
<p align="left">20.8.12,<br>
- 20.8.13.2 [unique.ptr], [util.<br>
+ 20.8.13.2 [unique.<br>
+ ptr], [util.<br>
smartptr.<br>
shared]<td>
<p align="left"><br>
@@ -6706,7 +6718,8 @@
<p>JP 49
<td>
- <p align="left">22.1.3.2.2
+ <p align="left">22.1.3.<br>
+ 2.2
<td>
<p align="left"><br>
@@ -6735,7 +6748,8 @@
<p>JP 50
<td>
- <p align="left">22.1.3.2.2
+ <p align="left">22.1.3.<br>
+ 2.2
<td>
<p align="left"><br>
@@ -6836,7 +6850,8 @@
<p>FI 5
<td>
- <p><tt>22.2.1.4.2</tt>
+ <p><tt>22.2.<br>
+ 1.4.2</tt>
<td>
<p>#3
@@ -7402,7 +7417,8 @@
<td>
<p align="justify">23
- <td>
+ [container.<br>
+ require-ments]<td>
<p align="justify"><br>
<td>
@@ -7439,7 +7455,7 @@
<td>
<p>
- [container.requirements] Agree in principle. We suggest proposed wording:<tr valign="top">
+ Agree in principle. We suggest proposed wording:<tr valign="top">
<td>
<p>JP 55
@@ -7478,7 +7494,9 @@
<td>
<p align="justify">23.1.1
- <td>
+ [container.<br>
+ require-ments.<br>
+ general]<td>
<p align="justify">3
<td>
@@ -7500,16 +7518,18 @@
<td>
<p>
- [container.requirements.general] Agree. Proposed wording will be presented
+ Agree. Proposed wording will be presented
in N2829 or D2840.<tr valign="top">
<td>
<p>UK<br>
224
<td>
- <p align="justify">23.1.1
+ <p align="justify">23.1.1<br>
- <td>
+ [container.<br>
+ require-ments.<br>
+ general]<td>
<p align="justify">8
<td>
@@ -7531,7 +7551,7 @@
<td>
<p>
- [container.requirements.general] Agree except with moving array to clause
+ Agree except with moving array to clause
20. Proposed wording will be presented in D2840.<tr valign="top">
<td>
<p>UK<br>
@@ -7573,7 +7593,9 @@
<td>
<p align="justify">23.1.1
- <td>
+ [container.<br>
+ require-ments.<br>
+ general]<td>
<p align="justify">10
<td>
@@ -7597,7 +7619,7 @@
<td>
<p>
- [container.requirements.general] Agree. The proposed resolution is
+ Agree. The proposed resolution is
incomplete. Further work required.<tr valign="top">
<td>
<p>UK<br>
@@ -7693,7 +7715,9 @@
<td>
<p align="justify">23.1.2
- <td>
+ [container.<br>
+ require-ments.<br>
+ dataraces]<td>
<p align="justify">1
<td>
@@ -7716,7 +7740,7 @@
<td>
<p>
- [container.requirements.dataraces] After considerable discussion and
+ After considerable discussion and
consideration, we do not feel this is a defect given the reference to [res.on.data.races].<tr valign="top">
<td>
<p>JP 56
@@ -7762,9 +7786,8 @@
231
<td>
- <p align="justify">23.1.3
-
- <td>
+ <p align="justify">23.1.3 [sequence.<br>
+ reqmts]<td>
<p align="justify">9-11
<td>
@@ -7785,15 +7808,15 @@
<td>
<p>
- <tr valign="top">
+ Agree with issue and change to [sequence.reqmts]. The changes required to
+ [strings] will be part of the general concept support for that clause.<tr valign="top">
<td>
<p>UK<br>
232
<td>
- <p align="justify">23.1.3
-
- <td>
+ <p align="justify">23.1.3 [sequence.<br>
+ reqmts]<td>
<p align="justify">Table 84
<td>
@@ -7813,15 +7836,14 @@
<td>
<p>
- <tr valign="top">
+ Agree. <code>operator[]</code> is defined elsewhere.<tr valign="top">
<td>
<p>UK<br>
233
<td>
- <p align="justify">23.1.3
-
- <td>
+ <p align="justify">23.1.3 [sequence.<br>
+ reqmts]<td>
<p align="justify">Table 84
<td>
@@ -7843,15 +7865,14 @@
<td>
<p>
- <tr valign="top">
+ Agree.<tr valign="top">
<td>
<p>UK<br>
234
<td>
- <p align="justify">23.1.3
-
- <td>
+ <p align="justify">23.1.3 [sequence.<br>
+ reqmts]<td>
<p align="justify">Table 84
<td>
@@ -7873,7 +7894,7 @@
<td>
<p>
- <tr valign="top">
+ Agree.<tr valign="top">
<td>
<p>UK<br>
235
@@ -7977,9 +7998,8 @@
238
<td>
- <p align="justify">23.1.4
-
- <td>
+ <p align="justify">23.1.4 [assoc-iative.<br>
+ reqmts]<td>
<p align="justify">6
<td>
@@ -8009,15 +8029,15 @@
<td>
<p>
- <tr valign="top">
+ Agree with issue. Agree with adding the note but not with changing the
+ normative text. We believe the note provides sufficient guidance.<tr valign="top">
<td>
<p>UK<br>
239
<td>
- <p align="justify">23.1.4
-
- <td>
+ <p align="justify">23.1.4 [assoc-iative.<br>
+ reqmts]<td>
<p align="justify">85
<td>
@@ -8043,15 +8063,17 @@
<td>
<p>
- <tr valign="top">
+ We look forward to a paper on this topic. We recommend no action until a
+ paper is available. The paper would need to address exception safety.<tr valign="top">
<td>
<p>UK<br>
240
<td>
- <p align="justify">23.1.6.1
-
- <td>
+ <p align="justify">23.1.6.1 <br>
+ [container.<br>
+ concepts.<br>
+ free]<td>
<p align="justify">12
<td>
@@ -8086,7 +8108,9 @@
<td>
<p>
- <tr valign="top">
+ We look forward to a paper on this topic. We recommend no action until a
+ paper is available. We suspect that there are other similar issues in this
+ sub-clause (9, 10).<tr valign="top">
<td>
<p>JP 57
@@ -8144,7 +8168,7 @@
<td>
<p>
- <tr valign="top">
+ Duplicate of UK 224.<tr valign="top">
<td>
<p>UK<br>
242
@@ -8178,9 +8202,8 @@
243
<td>
- <p align="justify">23.2.1
-
- <td>
+ <p align="justify">23.2.1 <br>
+ [array]<td>
<p align="justify">3
<td>
@@ -8200,14 +8223,17 @@
<td>
<p>
- <tr valign="top">
+ Agree. The proposed wording is forthcoming from Martin. We feel that these
+ overloads of swap are more important for array than other containers because
+ swap is not O(1) for array.<tr valign="top">
<td>
<p>UK<br>
244
<td>
<p align="justify">23.2.1,<br>
- 23.2.6
+ 23.2.6<br>
+ [array], [vector]
<td>
<p align="justify">1
@@ -8240,7 +8266,8 @@
<td>
<p>
- <tr valign="top">
+ Agree with the issue but not the details of the proposed solution. Walter to
+ provide wording for the new concept.<tr valign="top">
<td>
<p>UK<br>
245
@@ -9586,8 +9613,10 @@
279
<td>
- <p align="justify">24.4.1.2.12,<br>
- 24.4.3.2.12
+ <p align="justify">24.4.1.<br>
+ 2.12,<br>
+ 24.4.3.<br>
+ 2.12
<td>
<p align="justify"><br>
@@ -9617,7 +9646,8 @@
280
<td>
- <p align="justify">24.4.1.2.4
+ <p align="justify">24.4.1.<br>
+ 2.4
<td>
<p align="justify"><br>
@@ -9647,7 +9677,8 @@
281
<td>
- <p align="justify">24.4.1.2.5
+ <p align="justify">24.4.1.<br>
+ 2.5
<td>
<p align="justify"><br>
@@ -9732,7 +9763,8 @@
operator definition in p
<td>
- <p align="left"><br>
+ <p align="left">NAD. This is compatible with C++03; and we lack a
+ consensus for change.<br>
<tr valign="top">
<td>
@@ -9788,7 +9820,7 @@
<p align="left">Provide constraints
<td>
- <p align="left"><br>
+ <p align="left">We agree. To be handled by Howard, Martin and PJ.<br>
<tr valign="top">
<td>
@@ -10007,7 +10039,8 @@
<td>
<p>24.5.3<br>
- [istreambuf.<br>
+ [istream-<br>
+ buf.<br>
iterator]
<td>
@@ -10805,7 +10838,7 @@
<td>
<p>27.6.1.2.2<br>
- [istream.<br>
+ [istream.<br>
formatted.<br>
arithmetic]
@@ -10839,7 +10872,7 @@
<td>
<p>27.6.1.2.2<br>
- [istream.<br>
+ [istream.<br>
formatted.<br>
arithmetic]
@@ -12294,7 +12327,9 @@
<p align="left"><br>
<td>
- <p align="left">Hans to make proposal. See LWG Issue 926.<br>
+ <p align="left">Hans to make proposal. See LWG Issue 926.<p align="left">
+ UK 313 Update and LWG 926: Accept proposed resolution, correcting
+ spelling. Move to review state. Hans to ask additional review from cpp-threads.<br>
<tr valign="top">
<td>
@@ -13869,7 +13904,8 @@
<td>
<p>C.2<br>
- [diffs.library]
+ [diffs.<br>
+ library]
<td>
<p>1
@@ -13896,7 +13932,9 @@
<td>
<p>
- <tr valign="top">
+ Create issue. Document in question should be C99, not C90+ammendment1. The
+ rest of the section requires careful review for completeness. Example <cstdint>
+ 18.3.1 [csdtint.sym]. Assign to C liasons.<tr valign="top">
<td>
<p>UK<br>
344
@@ -13927,7 +13965,10 @@
<p>
Deals with deprecation, needs to be discussed in general group. Attention:
- Bill Plaugher<tr valign="top">
+ Bill Plaugher<p>
+
+ Update 2009-03-04: Mark as NAD. Compiler switches are outside the domain of
+ the standard.<tr valign="top">
<td>
<p>FR 39
@@ -13956,4 +13997,4 @@
<td>
<p>
- </table><hr>
\ No newline at end of file
+ Pass to the editor.</table><hr>
\ No newline at end of file
Modified: sandbox/committee/LWG/proposals/n2636.html
==============================================================================
--- sandbox/committee/LWG/proposals/n2636.html (original)
+++ sandbox/committee/LWG/proposals/n2636.html 2009-03-04 14:25:42 EST (Wed, 04 Mar 2009)
@@ -43,7 +43,7 @@
blockquote {padding: 10px; border: 1px #DDD dashed }
-a img {border: 0}
+a img {border: 0px none; }
div.google_header, div.google_footer {
position: relative;
@@ -249,8 +249,10 @@
â <i id=o17025>Remarks:</i> additional semantic constraints on the function<br id=o17026>
<br id=o17027>
</font> <font color=#009a9a id=o17028 size=3>â <i id=o17029>Error
- conditions:</i> the default error conditions for error codes reported by the
- function.</font><font id=lwna4 size=3><br id=zcuo2>
+ conditions:</i> the error condition constants corresponding to error codes reported by the
+ function. </font>
+ <font color=#009a9a id=o17045 size=3>Correspondence is established by the
+ system error support comparison operators ([syserr.compare]).</font><font id=lwna4 size=3><br id=zcuo2>
</font>
</p>
<p id=o17030>
@@ -289,16 +291,6 @@
</font>
</p>
<p id=o17033>
- <font color=#009a9a id=o17034 size=3>[<i id=o17039>Note:</i> the class
- <code id=o17040>error_condition</code> ([syserr.errcondition.overview<wbr id=o17041>]) object is reported via
- the <code id=o17042>default_error_condition</code> function ([syserr.errcode.observers]) of the class <code id=o17043>error_code</code>
- object representing the error. <i id=o17044>--end note.</i></font>
- </p>
- <p id=o17033>
- <font id=cnr60 size=3><br id=cnr61>
- </font>
- </p>
- <p id=o17033>
<br id=znal0>
</p>
</div>
@@ -637,4 +629,4 @@
<font id=wx2g566 size=3><span id=wx2g567 style=FONT-FAMILY:Arial><br id=wx2g568 style=FONT-FAMILY:Arial>
</span><br id=wx2g569 style=FONT-FAMILY:Arial>
</font><br id=wx2g570></body>
-</html>
+</html>
\ No newline at end of file
Modified: sandbox/committee/LWG/thread_safety.html
==============================================================================
--- sandbox/committee/LWG/thread_safety.html (original)
+++ sandbox/committee/LWG/thread_safety.html 2009-03-04 14:25:42 EST (Wed, 04 Mar 2009)
@@ -13,7 +13,7 @@
<p><span style="background-color: rgb(255, 255, 0)">Doc. no.
D2603=08-0113</span><br>
Date:
-<!--webbot bot="Timestamp" s-type="EDITED" s-format="%Y-%m-%d" startspan -->2008-04-27<!--webbot bot="Timestamp" endspan i-checksum="12290" --><br>
+<!--webbot bot="Timestamp" s-type="EDITED" s-format="%Y-%m-%d" startspan -->2008-04-30<!--webbot bot="Timestamp" endspan i-checksum="12277" --><br>
Project: Programming Language C++<br>
Reply to: Beman Dawes <bdawes at acm.org><br>
@@ -190,13 +190,12 @@
<blockquote>
<p>Functions <code>asctime</code><span class="q">,
</span><code>ctime</code><span class="q">, </span><code>gmtime</code><span class="q">,
- and </span><code>localtime</code> are not required to be thread-safe ([res.on.thread.safety]).</p>
+ and </span><code>localtime</code> are not required to avoid data races ([res.on.thread.safety]).</p>
</blockquote>
<p><i>To 21.4 Null-terminated sequence utilities [c.strings], add:</i></p>
<blockquote>
<p>Functions <code>
- strerror</code> and <code>strtok</code> are not required to be
- thread-safe ([res.on.thread.safety]).</p>
+ strerror</code> and <code>strtok</code> are not required to avoid data races ([res.on.thread.safety]).</p>
</blockquote>
<p><i>To 22.1.1 Class locale [locale], add a new paragraph at the end:</i></p>
<blockquote>
@@ -204,11 +203,11 @@
entire program or one global locale object per thread is implementation
defined. Implementations are encouraged but not required to provide one global
locale object per thread. If there is a single global locale object for the
- entire program, it is not required to be thread-safe ([res.on.thread.safety]).</font></u></p>
+ entire program, it is not required to avoid data races ([res.on.thread.safety]).</font></u></p>
</blockquote>
<p><i>At a location in 23 to be determined by the project editor, add a new paragraph:</i></p>
<blockquote>
- <p><u><font color="#228822">For purposes of determining thread-safety requirements ([res.on.thread.safety[),
+ <p><u><font color="#228822">For purposes of avoiding data races ([res.on.thread.safety[),
implementations shall consider the following functions to be const:<code>
begin</code>, <code>end</code>, <code>rbegin</code>, <code>rend</code>, <code>
front</code>, <code>back</code>, <code>data</code>, <code>find</code>, <code>
@@ -232,10 +231,7 @@
standard, except that the implementation may specify that particular library
functions may call <code>rand</code>.<font color="#228822"><u> </u></font>
<u><font color="#228822">It is implementation defined whether or not the</font></u><font color="#228822"><u>
- <code>rand</code> function is thread-safe ([res.on.thread.safety]).</u></font>
- <font color="#228822"><u>Implementations of <code>rand</code> are encouraged
- but not required to provide such thread-safety. Calls to <code>rand</code>
- from other library functions shall not result in data races.</u></font></p>
+ <code>rand</code> function avoid data races ([res.on.thread.safety]).</u></font></p>
</blockquote>
<h2><a name="Revision-history">Revision history</a></h2>
<p>N2603 - Revision 2:</p>
@@ -267,10 +263,14 @@
<p>N2298 - Initial version.</p>
<h2><a name="References">References</a></h2>
<p>
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2334.htm">
- N2334</a>, Concurrency memory model (revised again), Clark Nelson and Hans-J.
+ <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm">
+ N2429</a>, Concurrency memory model (final revision), Clark Nelson and Hans-J.
Boehm</p>
<p>
+ <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2480.html">
+ N2480</a>, A Less Formal Explanation of the Proposed C++ Concurrency Memory
+ Model, Hans-J. Boehm</p>
+ <p>
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2519.html">
N2519</a>, Library thread-safety
from a user's point of view, with wording, Jeffrey Yasskin</p>
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk