|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r51683 - sandbox/committee/LWG
From: bdawes_at_[hidden]
Date: 2009-03-10 08:24:07
Author: bemandawes
Date: 2009-03-10 08:24:04 EDT (Tue, 10 Mar 2009)
New Revision: 51683
URL: http://svn.boost.org/trac/boost/changeset/51683
Log:
Apply a long series of changes to the HTML to make it easier to convert to XML. No content was changed.
Text files modified:
sandbox/committee/LWG/LWG_0xCD1_status.html | 18460 +++++++++++++++++----------------------
1 files changed, 7870 insertions(+), 10590 deletions(-)
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-10 08:24:04 EDT (Tue, 10 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 -->09 Mar 2009 08:41:27 PM -0500<!--webbot bot="Timestamp" endspan i-checksum="42516" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %b %Y %I:%M:%S %p %Z" startspan -->10 Mar 2009 07:03:02 AM -0500<!--webbot bot="Timestamp" endspan i-checksum="41429" --></p>
<p>Disposition [Being reviewed by Editor] has been applied all Type Ed comments
which do not have a specific response from a sub-group.</p>
@@ -29,5027 +29,3962 @@
<table border="1" bordercolor="#000000" cellpadding="7"
cellspacing="0" style="border-collapse: collapse">
- <tr valign="top">
- <td>
- <p><b>MB<br></b><br>
+
+
+<tr valign="top">
+<td><b>MB<br></b><br>
+
+<td><b>Clause No./<br>
+Subclause No./<br>
+Annex<br></b>(e.g. 3.1)
- <td>
- <p><b>Clause No./<br>
- Subclause No./<br>
- Annex<br></b>(e.g. 3.1)
+<td><b>Para/<br>
+Figure/<br>Table/<br>Note</b><td><b>Type </b>
- <td>
- <p><b>Para/<br>
- Figure/<br>Table/<br>Note</b><td>
- <p><b>Type </b>
+<td><b>Comment (justification for change) by the MB</b>
- <td>
- <p><b>Comment (justification for change) by the MB</b>
+<td><b>Proposed change by the MB</b>
- <td>
- <p><b>Proposed change by the MB</b>
+<td><p align="center" style=
+"margin-top: 0.07in; margin-bottom: 0.04in; page-break-inside: avoid">
+<b>Library Work Group Notes</b><p>
- <td>
- <p align="center" style=
- "margin-top: 0.07in; margin-bottom: 0.04in; page-break-inside: avoid">
- <b>Library Work Group Notes</b><p>
+
- <tr valign="top">
- <td>
- <p align="left">US 2
+<tr valign="top">
+<td>US2
- <td>
- <p align="left">17-30
+<td>17-30
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p align="left">ge/te
+<td>ge/te
- <td>
- <p align="left">The
- active issues identified in WG21 N2806, C++ Standard
- Library Active Issues, must be addressed and appropriate
- action taken.
+<td>The
+active issues identified in WG21 N2806, C++ Standard
+Library Active Issues, must be addressed and appropriate
+action taken.
- <p align="left">
- <br>
+<p>
+<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>
+<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>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>
- <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>Acknowledged
- <td>
- <p>
+<tr valign="top">
+<td>FR2
- Acknowledged<tr valign="top">
- <td>
- <p>FR 2
+<td>General<br>
+Comment
- <td>
- <p>General<br>
- Comment
+<td>Library
- <td>
- <p>Library
+<td>ge
- <td>
- <p>ge
+<td>The adoption of the library `constexpr' proposal was not
+reflected in the draft, despite formal WG21 committee vote.
- <td>
- <p>The adoption of the library `constexpr' proposal was not
- reflected in the draft, despite formal WG21 committee vote.
+<td>FR2
- <td>
- <p>FR 2
+<td>Editorial; sent to Pete Becker
- <td>
- <p>Editorial; sent to Pete Becker<tr valign="top">
- <td>
- <p align="left">US 61
+<tr valign="top">
+<td>US61
- <td>
- <p align="left">17 onward
+<td>17 onward
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p align="left">te
+<td>te
- <td>
- <p>The concepts core language feature is applied to only
- some of the Standard Library clauses, and even then not
- always consistently.
+<td>The concepts core language feature is applied to only
+some of the Standard Library clauses, and even then not
+always consistently.
- <td>
- <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.
+<td>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>
+<p>
- <td>
- <p>
+<td>Agreed. Duplicates CA2
- Agreed. Duplicates CA2<tr valign="top">
- <td>
- <p><a name="CA2">CA-2 </a>
+<tr valign="top">
+<td><a name="CA2">CA2 </a>
- <td>
- <p style="margin-top: 0.04in">17 Library
+<td>17 Library
- <td>
- <p>
+<td>
- <td>
- <p>Ge
+<td>Ge
- <td>
- <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>
+“Concepts” are a significant new addition to
+the language, but are not exploited uniformly in the
+library as documented in CD 14882.
- <td>
- <p align="left" style="margin-top: 0.04in">Fix
- the standard library so that “Concepts” are
- used appropriately in the library.
+<td>Fix
+the standard library so that “Concepts” are
+used appropriately in the library.
- <td>
- <p>
+<td>Agreed; We intend to address this.
- Agreed; We intend to address this.<tr valign="top">
- <td>
- <p align="left">US 62
+<tr valign="top">
+<td>US62
- <td>
- <p align="left">17-30
+<td>17-30
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p align="left">ge
+<td>ge
- <td>
- <p align="left">Provide concepts
- and requirements clauses for all standard library templates
+<td>Provide concepts
+and requirements clauses for all standard library templates
- <p align="left"><br>
+<td>
- <td>
- <p align="left"><br>
+<td>Agreed. Duplicates CA2<br>
- <td>
- <p align="left">Agreed. Duplicates CA2<br>
+
- <tr valign="top">
- <td>
- <p>US 63
+<tr valign="top">
+<td>US63
- <td>
- <p style="margin-top: 0.04in; margin-bottom: 0.04in">17-30
+<td><p style="margin-top: 0.04in; margin-bottom: 0.04in">17-30
- <p>
+<p>
- <td>
- <p>
+<td>
- <td>
- <p>te
+<td>te
- <td>
- <p>The behavior of the library in the presence of threads
- is incompletely specified.
+<td>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>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?
+<p>Another example: does simultaneous access using operator
+at() to different characters in the same non-const string
+really introduce a data race?
- <td>
- <p>
+<td>
- <td>
- <p>
+<td>17 SG: should go to threads group; misclassified in document<p>
- 17 SG: should go to threads group; misclassified in document<p>
+ Concurrency SG: Create an issue. Hans will look into it.
- Concurrency SG: Create an issue. Hans will look into it.<tr valign="top">
- <td>
- <p>DE-2
+<tr valign="top">
+<td>DE2
- <td>
- <p>17 through 30
+<td>17 through 30
- <td>
- <p>
+<td>
- <td>
- <p>te
+<td>te
- <td>
- <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>DE2 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>
- <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>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>
- <p>
+<td>Robert Klarer to address this one
- Robert Klarer to address this one<tr valign="top">
- <td>
- <p>JP 21
+<tr valign="top">
+<td>JP21
- <td>
- <p align="left">
- <br>
+<td>
+<br>
- <p align="left">17
- Library
+<p>17
+Library
- <p align="left">
- 21.2, 21.4,
+<p>
+21.2, 21.4,
- <p align="left">27.2, 27.6,<br>
+<p>27.2, 27.6,<br>
27.7,<br>
27.8.1,<br>
28.4
- <td>
- <p align="left"><br>
-
- <td>
- <p>te
+<td>
- <td>
- <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.
+<td>te
- <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>
+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.
- <td>
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Add commented
- lines corresponding to char16_t, char32_t.
+<p>
+Functions such as stoi, to_string in ‘21.4 Numeric
+Conversion’ does not support char16_t/char32_t types.
- <p align="left">
- <br>
+<td>Add commented
+lines corresponding to char16_t, char32_t.
- <p align="left">
- 21.2 paragraph1
+<p>
+<br>
- <p align="left">
-
+<p>
+21.2 paragraph1
- <p align="left">
- namespace std {
+<p>
+
- <p align="left">
- ...
+<p>
+namespace std {
- <p align="left">
-
+<p>
+ ...
- <p align="left">
- // 21.4: numeric conversions
+<p>
+
- <p align="left">
- ...
+<p>
+ // 21.4: numeric conversions
- <p align="left">
-
+<p>
+ ...
- <p align="left">
- int stoi(const u16string& str, size_t *idx = 0,
- int base = 10);
+<p>
+
- <p align="left">
- long stol(const u16string& str, size_t *idx = 0,
- int base = 10);
+<p>
+ int stoi(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>
+ long stol(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>
+ unsigned long stoul(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>
+ long long stoll(const u16string& str, size_t *idx
+= 0, int base = 10);
- <p align="left">
- float stof(const u16string& str, size_t *idx =
- 0);
+<p>
+ unsigned long long stoull(const u16string& str,
+size_t *idx = 0, int base = 10);
- <p align="left">
- double stod(const u16string& str, size_t *idx =
- 0);
+<p>
+ float stof(const u16string& str, size_t *idx =
+0);
- <p align="left">
- long double stold(const u16string& str, size_t
- *idx = 0);
+<p>
+ double stod(const u16string& str, size_t *idx =
+0);
- <p align="left">
- u16string to_u16string(long long val);
+<p>
+ long double stold(const u16string& str, size_t
+*idx = 0);
- <p align="left">
- u16string to_u16string(unsigned long long val);
+<p>
+ u16string to_u16string(long long val);
- <p align="left">
- u16string to_u16string(long double val);
+<p>
+ u16string to_u16string(unsigned long long val);
- <p align="left">
-
+<p>
+ u16string to_u16string(long double val);
- <p align="left">
- int stoi(const u32string& str, size_t *idx = 0,
- int base = 10);
+<p>
+
- <p align="left">
- long stol(const u32string& str, size_t *idx = 0,
- int base = 10);
+<p>
+ int stoi(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>
+ long stol(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>
+ unsigned long stoul(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>
+ long long stoll(const u32string& str, size_t *idx
+= 0, int base = 10);
- <p align="left">
- float stof(const u32string& str, size_t *idx =
- 0);
+<p>
+ unsigned long long stoull(const u32string& str,
+size_t *idx = 0, int base = 10);
- <p align="left">
- double stod(const u32string& str, size_t *idx =
- 0);
+<p>
+ float stof(const u32string& str, size_t *idx =
+0);
- <p align="left">
- long double stold(const u32string& str, size_t
- *idx = 0);
+<p>
+ double stod(const u32string& str, size_t *idx =
+0);
- <p align="left">
- u32string to_u32string(long long val);
+<p>
+ long double stold(const u32string& str, size_t
+*idx = 0);
- <p align="left">
- u32string to_u32string(unsigned long long val);
+<p>
+ u32string to_u32string(long long val);
- <p align="left">
- u32string to_u32string(long double val);
+<p>
+ u32string to_u32string(unsigned long long val);
- <p align="left">}
+<p>
+ u32string to_u32string(long double val);
- <p align="left">
- <br>
+<p>}
- <p align="left">
- 27.2
+<p>
+<br>
- <p align="left">
-
+<p>
+27.2
- <p align="left">
- namespace std {
+<p>
+
- <p align="left">
- ...
+<p>
+namespace std {
- <p align="left">
- typedef basic_ios<char> ios;
+<p>
+ ...
- <p align="left">
- typedef basic_ios<wchar_t> wios;
+<p>
+ typedef basic_ios<char> ios;
- <p align="left">
- typedef basic_ios<char16_t> u16ios;
+<p>
+ typedef basic_ios<wchar_t> wios;
- <p align="left">
- typedef basic_ios<char32_t> u32ios;
+<p>
+ typedef basic_ios<char16_t> u16ios;
- <p align="left">
-
+<p>
+ typedef basic_ios<char32_t> u32ios;
- <p align="left">
- ...
+<p>
+
- <p align="left">
- typedef basic_ifstream<wchar_t> wifstream;
+<p>
+ ...
- <p align="left">
- typedef basic_ofstream<wchar_t> wofstream;
+<p>
+ typedef basic_ifstream<wchar_t> wifstream;
- <p align="left">
- typedef basic_fstream<wchar_t> wfstream;
+<p>
+ typedef basic_ofstream<wchar_t> wofstream;
- <p align="left">
-
+<p>
+ typedef basic_fstream<wchar_t> wfstream;
- <p align="left">
- typedef basic_streambuf<char16_t> u16streambuf;
+<p>
+
- <p align="left">
- typedef basic_istream<char16_t> u16istream;
+<p>
+ typedef basic_streambuf<char16_t> u16streambuf;
- <p align="left">
- typedef basic_ostream<char16_t> u16ostream;
+<p>
+ typedef basic_istream<char16_t> u16istream;
- <p align="left">
- typedef basic_iostream<char16_t> u16iostream;
+<p>
+ typedef basic_ostream<char16_t> u16ostream;
- <p align="left">
-
+<p>
+ typedef basic_iostream<char16_t> u16iostream;
- <p align="left">
- typedef basic_stringbuf<char16_t> u16stringbuf;
+<p>
+
- <p align="left">
- typedef basic_istringstream<char16_t>
- u16istringstream;
+<p>
+ typedef basic_stringbuf<char16_t> u16stringbuf;
- <p align="left">
- typedef basic_ostringstream<char16_t>
- u16ostringstream;
+<p>
+ typedef basic_istringstream<char16_t>
+u16istringstream;
- <p align="left">
- typedef basic_stringstream<char16_t>
- u16stringstream;
+<p>
+ typedef basic_ostringstream<char16_t>
+u16ostringstream;
- <p align="left">
- typedef basic_filebuf<char16_t> u16filebuf;
+<p>
+ typedef basic_stringstream<char16_t>
+u16stringstream;
- <p align="left">
-
+<p>
+ typedef basic_filebuf<char16_t> u16filebuf;
- <p align="left">
- typedef basic_ifstream<char16_t> u16ifstream;
+<p>
+
- <p align="left">
- typedef basic_ofstream<char16_t> u16ofstream;
+<p>
+ typedef basic_ifstream<char16_t> u16ifstream;
- <p align="left">
- typedef basic_fstream<char16_t> u16fstream;
+<p>
+ typedef basic_ofstream<char16_t> u16ofstream;
- <p align="left">
-
+<p>
+ typedef basic_fstream<char16_t> u16fstream;
- <p align="left">
- typedef basic_streambuf<char32_t> u32streambuf;
+<p>
+
- <p align="left">
- typedef basic_istream<char32_t> u32istream;
+<p>
+ typedef basic_streambuf<char32_t> u32streambuf;
- <p align="left">
- typedef basic_ostream<char32_t> u32ostream;
+<p>
+ typedef basic_istream<char32_t> u32istream;
- <p align="left">
- typedef basic_iostream<char32_t> u32iostream;
+<p>
+ typedef basic_ostream<char32_t> u32ostream;
- <p align="left">
-
+<p>
+ typedef basic_iostream<char32_t> u32iostream;
- <p align="left">
- typedef basic_stringbuf<char32_t> u32stringbuf;
+<p>
+
- <p align="left">
- typedef basic_istringstream<char32_t>
- u32istringstream;
+<p>
+ typedef basic_stringbuf<char32_t> u32stringbuf;
- <p align="left">
- typedef basic_ostringstream<char32_t>
- u32ostringstream;
+<p>
+ typedef basic_istringstream<char32_t>
+u32istringstream;
- <p align="left">
- typedef basic_stringstream<char32_t>
- u32stringstream;
+<p>
+ typedef basic_ostringstream<char32_t>
+u32ostringstream;
- <p align="left">
- typedef basic_filebuf<char32_t> u32filebuf;
+<p>
+ typedef basic_stringstream<char32_t>
+u32stringstream;
- <p align="left">
-
+<p>
+ typedef basic_filebuf<char32_t> u32filebuf;
- <p align="left">
- typedef basic_ifstream<char32_t> u32ifstream;
+<p>
+
- <p align="left">
- typedef basic_ofstream<char32_t> u32ofstream;
+<p>
+ typedef basic_ifstream<char32_t> u32ifstream;
- <p align="left">
- <u> typedef basic_fstream<char32_t>
- u32fstream;</u>
+<p>
+ typedef basic_ofstream<char32_t> u32ofstream;
- <p align="left">
-
+<p>
+<u> typedef basic_fstream<char32_t>
+u32fstream;</u>
- <p align="left">
- ...
+<p>
+
- <p align="left">
- template <class state> class fpos;
+<p>
+ ...
- <p align="left">
- typedef
- fpos<char_traits<char>::state_type> streampos;
+<p>
+ template <class state> class fpos;
- <p align="left">
- typedef
- fpos<char_traits<wchar_t>::state_type>
- wstreampos;
+<p>
+ typedef
+fpos<char_traits<char>::state_type> streampos;
- <p align="left">
- typedef
- fpos<char_traits<char16_t>::state_type>
- u16streampos;
+<p>
+ typedef
+fpos<char_traits<wchar_t>::state_type>
+wstreampos;
- <p align="left">
- typedef
- fpos<char_traits<char32_t>::state_type>
- u32streampos;
+<p>
+ typedef
+fpos<char_traits<char16_t>::state_type>
+u16streampos;
- <p align="left">}
+<p>
+ typedef
+fpos<char_traits<char32_t>::state_type>
+u32streampos;
- <p align="left">
- <br>
+<p>}
- <p align="left">
- 27.6
+<p>
+<br>
- <p align="left">
-
+<p>
+27.6
- <p align="left">
- namespace std {
+<p>
+
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
+<p>
+namespace std {
- <p align="left">
- class basic_istream;
+<p>
+ template <class charT, class traits =
+char_traits<charT> >
- <p align="left">
- typedef basic_istream<char> istream;
+<p>
+ class basic_istream;
- <p align="left">
- typedef basic_istream<wchar_t> wistream;
+<p>
+ typedef basic_istream<char> istream;
- <p align="left">
- <u>typedef basic_istream<char16_t>
- u16istream;</u>
+<p>
+ typedef basic_istream<wchar_t> wistream;
- <p align="left">
- typedef basic_istream<char32_t> u32istream;
+<p>
+ <u>typedef basic_istream<char16_t>
+u16istream;</u>
- <p align="left">
-
+<p>
+ typedef basic_istream<char32_t> u32istream;
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
+<p>
+
- <p align="left">
- class basic_iostream;
+<p>
+ template <class charT, class traits =
+char_traits<charT> >
- <p align="left">
- typedef basic_iostream<char> iostream;
+<p>
+ class basic_iostream;
- <p align="left">
- typedef basic_iostream<wchar_t> wiostream;
+<p>
+ typedef basic_iostream<char> iostream;
- <p align="left">
- <u>typedef basic_iostream<char16_t>
- u16iostream;</u>
+<p>
+ typedef basic_iostream<wchar_t> wiostream;
- <p align="left">
- typedef basic_iostream<char32_t> u32iostream;
+<p>
+ <u>typedef basic_iostream<char16_t>
+u16iostream;</u>
- <p align="left">}
+<p>
+ typedef basic_iostream<char32_t> u32iostream;
- <p align="left">
-
+<p>}
- <p align="left">
- namespace std {
+<p>
+
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
+<p>
+namespace std {
- <p align="left">
- class basic_ostream;
+<p>
+ template <class charT, class traits =
+char_traits<charT> >
- <p align="left">
- typedef basic_ostream<char> ostream;
+<p>
+ class basic_ostream;
- <p align="left">
- typedef basic_ostream<wchar_t> wostream;
+<p>
+ typedef basic_ostream<char> ostream;
- <p align="left">
- <u>typedef basic_ostream<char16_t>
- u16ostream;</u>
+<p>
+ typedef basic_ostream<wchar_t> wostream;
- <p align="left">
- typedef basic_ostream<char32_t> u32ostream;
+<p>
+ <u>typedef basic_ostream<char16_t>
+u16ostream;</u>
- <p align="left">}
+<p>
+ typedef basic_ostream<char32_t> u32ostream;
- <p align="left">
- <br>
+<p>}
- <p align="left">
- 27.7 paragraph 1
+<p>
+<br>
- <p align="left">
-
+<p>
+27.7 paragraph 1
- <p align="left">
- namespace std {
+<p>
+
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
+<p>
+namespace std {
- <p align="left">
- class Allocator =
- allocator<charT> >
+<p>
+ template <class charT, class traits =
+char_traits<charT>,
- <p align="left">
- class basic_stringbuf;
+<p>
+ class Allocator =
+allocator<charT> >
- <p align="left">
-
+<p>
+ class basic_stringbuf;
- <p align="left">
- typedef basic_stringbuf<char> stringbuf;
+<p>
+
- <p align="left">
- typedef basic_stringbuf<wchar_t> wstringbuf;
+<p>
+ typedef basic_stringbuf<char> stringbuf;
- <p align="left">
- <u>typedef basic_stringbuf<char16_t>
- u16stringbuf;</u>
+<p>
+ typedef basic_stringbuf<wchar_t> wstringbuf;
- <p align="left">
- typedef basic_stringbuf<char32_t> u32stringbuf;
+<p>
+ <u>typedef basic_stringbuf<char16_t>
+u16stringbuf;</u>
- <p align="left">
-
+<p>
+ typedef basic_stringbuf<char32_t> u32stringbuf;
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
+<p>
+
- <p align="left">
- class Allocator =
- allocator<charT> >
+<p>
+ template <class charT, class traits =
+char_traits<charT>,
- <p align="left">
- class basic_istringstream;
+<p>
+ class Allocator =
+allocator<charT> >
- <p align="left">
-
+<p>
+ class basic_istringstream;
- <p align="left">
- typedef basic_istringstream<char>
- istringstream;
+<p>
+
- <p align="left">
- typedef basic_istringstream<wchar_t>
- wistringstream;
+<p>
+ typedef basic_istringstream<char>
+istringstream;
- <p align="left">
- <u>typedef basic_istringstream<char16_t>
- u16istringstream;</u>
+<p>
+ typedef basic_istringstream<wchar_t>
+wistringstream;
- <p align="left">
- typedef basic_istringstream<char32_t>
- u32istringstream;
+<p>
+ <u>typedef basic_istringstream<char16_t>
+u16istringstream;</u>
- <p align="left">
-
+<p>
+ typedef basic_istringstream<char32_t>
+u32istringstream;
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
+<p>
+
- <p align="left">
- class Allocator =
- allocator<charT> >
+<p>
+ template <class charT, class traits =
+char_traits<charT>,
- <p align="left">
- class basic_ostringstream;
+<p>
+ class Allocator =
+allocator<charT> >
- <p align="left">
-
+<p>
+ class basic_ostringstream;
- <p align="left">
- typedef basic_ostringstream<char>
- ostringstream;
+<p>
+
- <p align="left">
- typedef basic_ostringstream<wchar_t>
- wostringstream;
+<p>
+ typedef basic_ostringstream<char>
+ostringstream;
- <p align="left">
- <u>typedef basic_ostringstream<char16_t>
- u16ostringstream;</u>
+<p>
+ typedef basic_ostringstream<wchar_t>
+wostringstream;
- <p align="left">
- typedef basic_ostringstream<char32_t>
- u32ostringstream;
+<p>
+ <u>typedef basic_ostringstream<char16_t>
+u16ostringstream;</u>
- <p align="left">
-
+<p>
+ typedef basic_ostringstream<char32_t>
+u32ostringstream;
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
+<p>
+
- <p align="left">
- class Allocator =
- allocator<charT> >
+<p>
+ template <class charT, class traits =
+char_traits<charT>,
- <p align="left">
- class basic_stringstream;
+<p>
+ class Allocator =
+allocator<charT> >
- <p align="left">
-
+<p>
+ class basic_stringstream;
- <p align="left">
- typedef basic_stringstream<char> stringstream;
+<p>
+
- <p align="left">
- typedef basic_stringstream<wchar_t>
- wstringstream;
+<p>
+ typedef basic_stringstream<char> stringstream;
- <p align="left">
- typedef basic_stringstream<char16_t>
- u16stringstream;
+<p>
+ typedef basic_stringstream<wchar_t>
+wstringstream;
- <p align="left">
- typedef basic_stringstream<char32_t>
- u32stringstream;
+<p>
+ typedef basic_stringstream<char16_t>
+u16stringstream;
- <p align="left">}
+<p>
+ typedef basic_stringstream<char32_t>
+u32stringstream;
- <p align="left">
- <br>
+<p>}
- <p align="left">
- 27.8.1 paragraph 1
+<p>
+<br>
- <p align="left">
-
+<p>
+27.8.1 paragraph 1
- <p align="left">
- namespace std {
+<p>
+
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
+<p>
+namespace std {
- <p align="left">
- class basic_filebuf;
+<p>
+ template <class charT, class traits =
+char_traits<charT> >
- <p align="left">
- typedef basic_filebuf<char> filebuf;
+<p>
+ class basic_filebuf;
- <p align="left">
- typedef basic_filebuf<wchar_t> wfilebuf;
+<p>
+ typedef basic_filebuf<char> filebuf;
- <p align="left">
- <u>typedef basic_filebuf<char16_t>
- u16filebuf;</u>
+<p>
+ typedef basic_filebuf<wchar_t> wfilebuf;
- <p align="left">
- typedef basic_filebuf<char32_t> u32filebuf;
+<p>
+ <u>typedef basic_filebuf<char16_t>
+u16filebuf;</u>
- <p align="left">
-
+<p>
+ typedef basic_filebuf<char32_t> u32filebuf;
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
+<p>
+
- <p align="left">
- class basic_ifstream;
+<p>
+ template <class charT, class traits =
+char_traits<charT> >
- <p align="left">
- typedef basic_ifstream<char> ifstream;
+<p>
+ class basic_ifstream;
- <p align="left">
- typedef basic_ifstream<wchar_t> wifstream;
+<p>
+ typedef basic_ifstream<char> ifstream;
- <p align="left">
- <u>typedef basic_ifstream<char16_t>
- u16ifstream;</u>
+<p>
+ typedef basic_ifstream<wchar_t> wifstream;
- <p align="left">
- typedef basic_ifstream<char32_t> u32ifstream;
+<p>
+ <u>typedef basic_ifstream<char16_t>
+u16ifstream;</u>
- <p align="left">
-
+<p>
+ typedef basic_ifstream<char32_t> u32ifstream;
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
+<p>
+
- <p align="left">
- class basic_ofstream;
+<p>
+ template <class charT, class traits =
+char_traits<charT> >
- <p align="left">
- typedef basic_ofstream<char> ofstream;
+<p>
+ class basic_ofstream;
- <p align="left">
- typedef basic_ofstream<wchar_t> wofstream;
+<p>
+ typedef basic_ofstream<char> ofstream;
- <p align="left">
- <u>typedef basic_ofstream<char16_t>
- u16ofstream;</u>
+<p>
+ typedef basic_ofstream<wchar_t> wofstream;
- <p align="left">
- typedef basic_ofstream<char32_t> u32ofstream;
+<p>
+ <u>typedef basic_ofstream<char16_t>
+u16ofstream;</u>
- <p align="left">
-
+<p>
+ typedef basic_ofstream<char32_t> u32ofstream;
- <p align="left">
- template <class charT, class traits =
- char_traits<charT> >
+<p>
+
- <p align="left">
- class basic_fstream;
+<p>
+ template <class charT, class traits =
+char_traits<charT> >
- <p align="left">
- typedef basic_fstream<char> fstream;
+<p>
+ class basic_fstream;
- <p align="left">
- typedef basic_fstream<wchar_t> wfstream;
+<p>
+ typedef basic_fstream<char> fstream;
- <p align="left">
- <u>typedef basic_fstream<char16_t>
- u16fstream;</u>
+<p>
+ typedef basic_fstream<wchar_t> wfstream;
- <p align="left">
- typedef basic_fstream<char32_t> u32fstream;
+<p>
+ <u>typedef basic_fstream<char16_t>
+u16fstream;</u>
- <p align="left">}
+<p>
+ typedef basic_fstream<char32_t> u32fstream;
- <p align="left">
- <br>
+<p>}
- <p align="left">
- 28.4
+<p>
+<br>
- <p align="left">
-
+<p>
+28.4
- <p align="left">
- namespace std {
+<p>
+
- <p align="left">
- ...
+<p>
+namespace std {
- <p align="left">
- typedef basic_regex<char> regex;
+<p>
+ ...
- <p align="left">
- typedef basic_regex<wchar_t> wregex;
+<p>
+ typedef basic_regex<char> regex;
- <p align="left">
- typedef basic_regex<char16_t> u16regex;
+<p>
+ typedef basic_regex<wchar_t> wregex;
- <p align="left">
- typedef basic_regex<char32_t> u32regex;
+<p>
+ typedef basic_regex<char16_t> u16regex;
- <p align="left">
-
+<p>
+ typedef basic_regex<char32_t> u32regex;
- <p align="left">
- ...
+<p>
+
- <p align="left">
- typedef sub_match<const char*> csub_match;
+<p>
+ ...
- <p align="left">
- typedef sub_match<const wchar_t*> wcsub_match;
+<p>
+ typedef sub_match<const char*> csub_match;
- <p align="left">
- typedef sub_match<const char16_t*>
- u16csub_match;
+<p>
+ typedef sub_match<const wchar_t*> wcsub_match;
- <p align="left">
- typedef sub_match<const char32_t*>
- u16csub_match;
+<p>
+ typedef sub_match<const char16_t*>
+u16csub_match;
- <p align="left">
- typedef sub_match<string::const_iterator>
- ssub_match;
+<p>
+ typedef sub_match<const char32_t*>
+u16csub_match;
- <p align="left">
- typedef sub_match<wstring::const_iterator>
- wssub_match;
+<p>
+ typedef sub_match<string::const_iterator>
+ssub_match;
- <p align="left">
- typedef sub_match<u16string::const_iterator>
- u16ssub_match;
+<p>
+ typedef sub_match<wstring::const_iterator>
+wssub_match;
- <p align="left">
- typedef sub_match<u32string::const_iterator>
- u32ssub_match;
+<p>
+ typedef sub_match<u16string::const_iterator>
+u16ssub_match;
- <p align="left">
-
+<p>
+ typedef sub_match<u32string::const_iterator>
+u32ssub_match;
- <p align="left">
- ...
+<p>
+
- <p align="left">
- typedef match_results<const char*> cmatch;
+<p>
+ ...
- <p align="left">
- typedef match_results<const wchar_t*> wcmatch;
+<p>
+ typedef match_results<const char*> cmatch;
- <p align="left">
- typedef match_results<const char16_t*>
- u16cmatch;
+<p>
+ typedef match_results<const wchar_t*> wcmatch;
- <p align="left">
- typedef match_results<const char32_t*>
- u32cmatch;
+<p>
+ typedef match_results<const char16_t*>
+u16cmatch;
- <p align="left">
- typedef match_results<string::const_iterator>
- smatch;
+<p>
+ typedef match_results<const char32_t*>
+u32cmatch;
- <p align="left">
- typedef match_results<wstring::const_iterator>
- wsmatch;
+<p>
+ typedef match_results<string::const_iterator>
+smatch;
- <p align="left">
- typedef
- match_results<u16string::const_iterator> u16smatch;
+<p>
+ typedef match_results<wstring::const_iterator>
+wsmatch;
- <p align="left">
- typedef
- match_results<u32string::const_iterator> u32smatch;
+<p>
+ typedef
+match_results<u16string::const_iterator> u16smatch;
- <p align="left">
-
+<p>
+ typedef
+match_results<u32string::const_iterator> u32smatch;
- <p align="left">
- ...
+<p>
+
- <p align="left">
- typedef regex_iterator<const char*>
- cregex_iterator;
+<p>
+ ...
- <p align="left">
- typedef regex_iterator<const wchar_t*>
- wcregex_iterator;
+<p>
+ typedef regex_iterator<const char*>
+cregex_iterator;
- <p align="left">
- typedef regex_iterator<const cha16r_t*>
- u16cregex_iterator;
+<p>
+ typedef regex_iterator<const wchar_t*>
+wcregex_iterator;
- <p align="left">
- typedef regex_iterator<const char32_t*>
- u32cregex_iterator;
+<p>
+ typedef regex_iterator<const cha16r_t*>
+u16cregex_iterator;
- <p align="left">
- typedef regex_iterator<string::const_iterator>
- sregex_iterator;
+<p>
+ typedef regex_iterator<const char32_t*>
+u32cregex_iterator;
- <p align="left">
- typedef regex_iterator<wstring::const_iterator>
- wsregex_iterator;
+<p>
+ typedef regex_iterator<string::const_iterator>
+sregex_iterator;
- <p align="left">
- typedef
- regex_iterator<u16string::const_iterator>
- u16sregex_iterator;
+<p>
+ typedef regex_iterator<wstring::const_iterator>
+wsregex_iterator;
- <p align="left">
- typedef
- regex_iterator<u32string::const_iterator>
- u32sregex_iterator;
+<p>
+ typedef
+regex_iterator<u16string::const_iterator>
+u16sregex_iterator;
- <p align="left">
-
+<p>
+ typedef
+regex_iterator<u32string::const_iterator>
+u32sregex_iterator;
- <p align="left">
- ...
+<p>
+
- <p align="left">
- typedef regex_token_iterator<const char*>
- cregex_token_iterator;
+<p>
+ ...
- <p align="left">
- typedef regex_token_iterator<const wchar_t*>
- wcregex_token_iterator;
+<p>
+ typedef regex_token_iterator<const char*>
+cregex_token_iterator;
- <p align="left">
- typedef regex_token_iterator<const char16_t*>
- u16cregex_token_iterator;
+<p>
+ typedef regex_token_iterator<const wchar_t*>
+wcregex_token_iterator;
- <p align="left">
- typedef regex_token_iterator<const char32_t*>
- u32cregex_token_iterator;
+<p>
+ typedef regex_token_iterator<const char16_t*>
+u16cregex_token_iterator;
- <p align="left">
- typedef
- regex_token_iterator<string::const_iterator>
- sregex_token_iterator;
+<p>
+ typedef regex_token_iterator<const char32_t*>
+u32cregex_token_iterator;
- <p align="left">
- typedef
- regex_token_iterator<wstring::const_iterator><span lang="zxx">
-    </span>wsregex_token_iterator;
+<p>
+ typedef
+regex_token_iterator<string::const_iterator>
+sregex_token_iterator;
- <p align="left">
- typedef
- regex_token_iterator<u16string::const_iterator>
- u16sregex_token_iterator;
+<p>
+ typedef
+regex_token_iterator<wstring::const_iterator><span lang="zxx">
+   </span>wsregex_token_iterator;
- <p align="left">
- typedef
- regex_token_iterator<u32string::const_iterator><span lang="zxx">
-  </span>u32sregex_token_iterator;
+<p>
+ typedef
+regex_token_iterator<u16string::const_iterator>
+u16sregex_token_iterator;
- <p align="left">}
+<p>
+ typedef
+regex_token_iterator<u32string::const_iterator><span lang="zxx">
+ </span>u32sregex_token_iterator;
- <p align="left"><br>
+<p>}
- <td>
- <p>
-
- Previously considered; we decided not to do it. We believe it is not too
+<td>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>
- <p>UK<br>
- 144
-
- <td>
- <p align="justify">17.1
-
- <td>
- <p align="justify">2
-
- <td>
- <p align="justify">Ed
-
- <td>
- <p align="left">List of contents of library should be
- extened to cover new clauses
-
- <td>
- <p align="left">Add "regular expressions, atomic operations
- and threads"
+ intermediaries to avoid proliferation of types.
- <td>
- <p>
+<tr valign="top">
+<td>UK144
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 145
+<td>17.1
- <td>
- <p align="justify">17.1
+<td>2
- <td>
- <p align="justify">6
+<td>Ed
- <td>
- <p align="justify">Ed
+<td>List of contents of library should be
+extened to cover new clauses
- <td>
- <p align="left">
- <span lang="en-US">Summary of numeric facilities should
- mention random numbers</span>
+<td>Add "regular expressions, atomic operations
+and threads"
- <p align="left"><br>
+<td>[Being reviewed by Editor]
- <td>
- <p align="left">Add random number framework to the list of
- library facilities
+<tr valign="top">
+<td>UK145
- <td>
- <p>
+<td>17.1
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 146
+<td>6
- <td>
- <p align="justify">17.1
+<td>Ed
- <td>
- <p align="justify"><br>
+<td>
+<span lang="en-US">Summary of numeric facilities should
+mention random numbers</span>
- <td>
- <p align="justify">Ed
+<td>Add random number framework to the list of
+library facilities
- <td>
- <p align="left">Add a summary paragraph for regular
- expressions
+<td>[Being reviewed by Editor]
- <td>
- <p align="left">Add a summary paragraph for regular
- expressions
+<tr valign="top">
+<td>UK146
- <td>
- <p>
+<td>17.1
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 147
+<td>
- <td>
- <p align="justify">17.1
+<td>Ed
- <td>
- <p align="justify"><br>
+<td>Add a summary paragraph for regular
+expressions
- <td>
- <p align="justify">Ed
+<td>Add a summary paragraph for regular
+expressions
- <td>
- <p align="left">Add a summary paragraph for threads
+<td>[Being reviewed by Editor]
- <td>
- <p align="left">Add a summary paragraph for threads
+<tr valign="top">
+<td>UK147
- <td>
- <p>
+<td>17.1
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 148
+<td>
- <td>
- <p align="justify">17.2
+<td>Ed
- <td>
- <p align="justify">Table 12
+<td>Add a summary paragraph for threads
- <td>
- <p align="justify">Ed
+<td>Add a summary paragraph for threads
- <td>
- <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.
+<td>[Being reviewed by Editor]
- <p align="left"><br>
+<tr valign="top">
+<td>UK148
- <td>
- <p align="left">Make sure tables are rendered in the
- section to which they relate.
+<td>17.2
- <td>
- <p>
+<td>Table 12
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 149
+<td>Ed
- <td>
- <p align="justify">17.3
+<td>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.
- <td>
- <p align="justify"><br>
+<td>Make sure tables are rendered in the
+section to which they relate.
- <td>
- <p align="justify">Ed
+<td>[Being reviewed by Editor]
- <td>
- <p align="left">For consistency
- with narrow-oriented and wide-oriented streams, we should
- add terms for streams of Unicode character sequences
+<tr valign="top">
+<td>UK149
- <p align="left"><br>
+<td>17.3
- <td>
- <p align="left">Define Utf16-oriented stream classes and
- Uft32-oriented stream classes for streams of
- char16_t/char32_t values.
+<td>
- <td>
- <p>
+<td>Ed
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 150
+<td>For consistency
+with narrow-oriented and wide-oriented streams, we should
+add terms for streams of Unicode character sequences
- <td>
- <p align="justify">17.3
+<td>Define Utf16-oriented stream classes and
+Uft32-oriented stream classes for streams of
+char16_t/char32_t values.
- <td>
- <p align="justify"><br>
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">Ed
+<tr valign="top">
+<td>UK150
- <td>
- <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>17.3
- <td>
- <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.
+<td>
- <p align="left"><br>
+<td>Ed
- <td>
- <p>
+<td>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'.
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 151
+<td>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.
- <td>
- <p align="justify">17.3.1
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify"><br>
+<tr valign="top">
+<td>UK151
- <td>
- <p align="justify">Ed
+<td>17.3.1
- <td>
- <p align="left">Missing
- crossreference to 17.3.17 [defns.repositional.stream]
+<td>
- <p align="left"><br>
+<td>Ed
- <td>
- <p align="left">Add cross-reference in the existing empty
- brackets
+<td>Missing
+crossreference to 17.3.17 [defns.repositional.stream]
- <td>
- <p>
+<td>Add cross-reference in the existing empty
+brackets
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 152
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">17.3.12
+<tr valign="top">
+<td>UK152
- <td>
- <p align="justify"><br>
+<td>17.3.12
- <td>
- <p align="justify">Te
+<td>
- <td>
- <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
+<td>Te
- <p align="left"><br>
+<td>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
- <td>
- <p align="left">Clarify terms and usage
+<td>Clarify terms and usage
- <td>
- <p>
+<td>we think we're removing this; Howard to create LWG issue. Howard, see [func.referenceclosure.cons]
- we think we're removing this; Howard to create LWG issue. Howard, see [func.referenceclosure.cons]<tr valign="top">
- <td>
- <p>UK<br>
- 153
+<tr valign="top">
+<td>UK153
- <td>
- <p align="justify">17.3.17
+<td>17.3.17
- <td>
- <p align="justify"><br>
+<td>
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <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
+<td>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>Strike the word 'only'. A note might be
+added to reinforce the intent
- <td>
- <p align="left">Strike the word 'only'. A note might be
- added to reinforce the intent
+<td>editorial; sent to Pete Becker
- <td>
- <p>
+<tr valign="top">
+<td><p align="justify" style=
+"margin-right: -0.18in; margin-bottom: 0in">UK154
- editorial; sent to Pete Becker<tr valign="top">
- <td>
- <p align="justify" style=
- "margin-right: -0.18in; margin-bottom: 0in">UK<br>
- 154
+<p>
- <p>
+<td>17.3.20
- <td>
- <p align="justify">17.3.20
+<td>
- <td>
- <p align="justify"><br>
+<td>Ed
- <td>
- <p align="justify">Ed
+<td>Missing definition of a stable partition
+algorithm
- <td>
- <p align="left">Missing definition of a stable partition
- algorithm
+<td>Add definition from 25.2.12p7
- <td>
- <p align="left">Add definition from 25.2.12p7
+<td>[Being reviewed by Editor]
- <td>
- <p>
+<tr valign="top">
+<td>UK155
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 155
+<td>17.3.3
- <td>
- <p align="justify">17.3.3
+<td>
- <td>
- <p align="justify"><br>
+<td>Ed
- <td>
- <p align="justify">Ed
+<td>Add clause 28 to list that use this
+definition of character
- <td>
- <p align="left">Add clause 28 to list that use this
- definition of character
+<td>Add clause 28 to list that use this
+definition of character
- <td>
- <p align="left">Add clause 28 to list that use this
- definition of character
+<td>[Being reviewed by Editor]
- <td>
- <p>
+<tr valign="top">
+<td>UK156
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 156
+<td>17.3.4
- <td>
- <p align="justify">17.3.4
+<td>
- <td>
- <p align="justify"><br>
+<td>Ed
- <td>
- <p align="justify">Ed
+<td>Add regular
+expressions to set of templates using character container
+type
- <td>
- <p align="left">Add regular
- expressions to set of templates using character container
- type
+<td>Add regular expressions to set of templates
+using character container type
- <p align="left"><br>
+<td>[Being reviewed by Editor]
- <td>
- <p align="left">Add regular expressions to set of templates
- using character container type
+<tr valign="top">
+<td>UK157
- <td>
- <p>
+<td>17.5.2.2
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 157
+<td>3
- <td>
- <p align="justify">17.5.2.2
+<td>Ed
- <td>
- <p align="justify">3
+<td>Add concepts to
+the ordered list of presentation
- <td>
- <p align="justify">Ed
+<p><br>
- <td>
- <p align="left">Add concepts to
- the ordered list of presentation
+<td>Add concepts into the sequence
- <p align="left"><br>
+<td>[Being reviewed by Editor]
- <p align="left"><br>
+<tr valign="top">
+<td>UK158
- <td>
- <p align="left">Add concepts into the sequence
+<td>17.5.2.2
- <td>
- <p>
+<td>3
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 158
+<td>Ed
- <td>
- <p align="justify">17.5.2.2
+<td>templates are neither classes nor functions
- <td>
- <p align="justify">3
+<td>Replace
+'classes' and 'functions' with 'classes and class
+templates' and 'functions and function templates'
- <td>
- <p align="justify">Ed
+<td>[Being reviewed by Editor]
- <td>
- <p align="left">templates are neither classes nor functions
+<tr valign="top">
+<td>UK159
- <td>
- <p align="left">Replace
- 'classes' and 'functions' with 'classes and class
- templates' and 'functions and function templates'
+<td>17.5.2.4
- <p align="left"><br>
+<td>Footnote 152
- <td>
- <p>
+<td>Ed
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 159
+<td>This informative
+footnote was relevant in 1998, not 2008. The term 'existing
+vendors' may imply something different now
- <td>
- <p align="justify">17.5.2.4
+<td>Strike the footnote, or replace 'existing'
+with 'original' or similar
- <td>
- <p align="justify">Footnote 152
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">Ed
+<tr valign="top">
+<td>UK160
- <td>
- <p align="left">This informative
- footnote was relevant in 1998, not 2008. The term 'existing
- vendors' may imply something different now
+<td>17.5.2.4
- <p align="left"><br>
+<td>3
- <td>
- <p align="left">Strike the footnote, or replace 'existing'
- with 'original' or similar
+<td>Ed
- <td>
- <p>
+<td>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.
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 160
+<td>Replace 'Requires' with 'Preconditions'
- <td>
- <p align="justify">17.5.2.4
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">3
+<tr valign="top">
+<td>UK161
- <td>
- <p align="justify">Ed
+<td>17.5.2.4
- <td>
- <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.
+<td>4
- <p align="left"><br>
+<td>Ed
- <td>
- <p align="left">Replace 'Requires' with 'Preconditions'
+<td>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?
- <td>
- <p>
+<td>Strike 17.5.2.4p4
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 161
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">17.5.2.4
+<tr valign="top">
+<td>UK162
- <td>
- <p align="justify">4
+<td>17.5.2.4
- <td>
- <p align="justify">Ed
+<td>3
- <td>
- <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?
+<td>Ed
- <p align="left"><br>
+<td>Clause 30 makes
+use of a 'Synchronization' semantic element, that
+frequently appears either between Effects: and
+Postconditions:, or between Returns: and Throws:
- <td>
- <p align="left">Strike 17.5.2.4p4
+<td>Add 'Synchronization' to the list either
+between Effects: and Postconditions:, or between Returns:
+and Throws:.
- <td>
- <p>
+<td>[Being reviewed by Editor]
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 162
+<tr valign="top">
+<td>UK163
- <td>
- <p align="justify">17.5.2.4
+<td>17.5.2.4
- <td>
- <p align="justify">3
+<td>3
- <td>
- <p align="justify">Ed
+<td>Te
- <td>
- <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:
+<td>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>Introduce an explicit "Equivalent to",
+which defines all of the properties of the function.
- <td>
- <p align="left">Add 'Synchronization' to the list either
- between Effects: and Postconditions:, or between Returns:
- and Throws:.
+<td>Tom Plum to open LWG issue; we believe this is related to
+ LWG625
- <td>
- <p>
+<tr valign="top">
+<td>UK164
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 163
+<td>17.5.3.2.1
- <td>
- <p align="justify">17.5.2.4
+<td>1
- <td>
- <p align="justify">3
+<td>Ed
- <td>
- <p align="justify">Te
+<td>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>
- <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.
+<td>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>[Being reviewed by Editor]
- <td>
- <p align="left">Introduce an explicit "Equivalent to",
- which defines all of the properties of the function.
+<tr valign="top">
+<td>UK165
- <td>
- <p>
-
- Tom Plum to open LWG issue; we believe this is related to
- LWG625<tr valign="top">
- <td>
- <p>UK<br>
- 164
+<td>17.5.3.2.2,<br>
+ 17.5.3.2.3
- <td>
- <p align="justify">17.5.3.2.1
+<td>
- <td>
- <p align="justify">1
+<td>Te
- <td>
- <p align="justify">Ed
+<td>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
- <td>
- <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>Adopt wording in line with the motivation
+described in N2235
- <td>
- <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.
+<td>Robert Klarer to review
- <p align="left"><br>
+<tr valign="top">
+<td>UK166
- <td>
- <p>
+<td>17.5.3.<br>
+2.4.1,<br>
+17.5.3.3
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 165
+<td>
- <td>
- <p align="justify">17.5.3.2.2,<br>
- 17.5.3.2.3
+<td>Ed
- <td>
- <p align="justify"><br>
+<td>List of library clauses should go up to 30,
+not 27
- <td>
- <p align="justify">Te
+<td>Replace initial refernce to ch27 with ch30
- <td>
- <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
+<td>[Being reviewed by Editor]
- <p align="left"><br>
+<tr valign="top">
+<td>UK167
- <td>
- <p align="left">Adopt wording in line with the motivation
- described in N2235
+<td>17.5.3.4<br>
+ Private<br>
+ members
- <td>
- <p>
+<td>
- Robert Klarer to review<tr valign="top">
- <td>
- <p>UK<br>
- 166
+<td>Ed
- <td>
- <p align="justify">17.5.3.<br>
- 2.4.1,<br>
- 17.5.3.3
+<td>Comment marker in wrong place.
- <p align="justify"><br>
+<td>Change: //
+streambuf* sb; exposition only to streambuf* sb; //
+exposition only To reflect actual usage.
- <td>
- <p align="justify"><br>
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">Ed
+<tr valign="top">
+<td>UK168
- <td>
- <p align="left">List of library clauses should go up to 30,
- not 27
+<td>17.6.2.2
- <td>
- <p align="left">Replace initial refernce to ch27 with ch30
+<td>2
- <td>
- <p>
+<td>Te
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 167
+<td>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.)
- <td>
- <p align="justify">17.5.3.4<br>
- Private<br>
- members
+<td>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>
- <p align="justify"><br>
+<td>Howard will create issue to adopt UK words (some have reservations whether
+ it is correct)
- <td>
- <p align="justify">Ed
+<tr valign="top">
+<td>UK169
- <td>
- <p align="left">Comment marker in wrong place.
+<td>17.6.2.2
- <td>
- <p align="left">Change: //
- streambuf* sb; exposition only to streambuf* sb; //
- exposition only To reflect actual usage.
+<td>
- <p align="left"><br>
+<td>Te
- <td>
- <p>
+<td>This phrasing
+contradicts later freedom to implement the C standard
+library portions in the global namespace as well as std.
+(17.6.2.3p4)
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 168
+<td>Resolve conflict in either place
- <td>
- <p align="justify">17.6.2.2
+<td>Bill Plauger to open issue. If the wording is too broad we need to add an
+ exception to the standard C library.
- <td>
- <p align="justify">2
+<tr valign="top">
+<td>UK170
- <td>
- <p align="justify">Te
+<td>17.6.2.3
- <td>
- <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.)
+<td>
- <p align="left"><br>
+<td>Te
- <td>
- <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>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.
- <td>
- <p>
+<td>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.
- Howard will create issue to adopt UK words (some have reservations whether
- it is correct)<tr valign="top">
- <td>
- <p>UK<br>
- 169
+<td>Alisdair to open issue. We prefer <std> only.
- <td>
- <p align="justify">17.6.2.2
+<tr valign="top">
+<td>UK171
- <td>
- <p align="justify"><br>
+<td>17.6.2.4
- <td>
- <p align="justify">Te
+<td>3
- <td>
- <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)
+<td>Ed
- <p align="left"><br>
+<td>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?
- <td>
- <p align="left">Resolve conflict in either place
+<td>Either strike the references to abort,
+at_exit and exit, or clarify which headers only require
+partial support.
- <td>
- <p>
+<td>[Being reviewed by Editor]
- 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>
- 170
+<tr valign="top">
+<td>UK172
- <td>
- <p align="justify">17.6.2.3
+<td>17.6.2.4
- <td>
- <p align="justify"><br>
+<td>3
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <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.
+<td>No reference to
+new functions quick_exit and at_quick_exit
- <p align="left"><br>
+<td>Add reference to quick_exit and
+at_quick_exit
- <td>
- <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>NAD. We do not belive at_exit and at_quick_exit should be required by
+ freestanding implementations.
- <td>
- <p>
+<tr valign="top">
+<td>UK173
- Alisdair to open issue. We prefer <std> only.<tr valign="top">
- <td>
- <p>UK<br>
- 171
+<td>17.6.2.4
- <td>
- <p align="justify">17.6.2.4
+<td>table 15
- <td>
- <p align="justify">3
+<td>Te
- <td>
- <p align="justify">Ed
+<td>
+<initializer_list> is missing from headers required
+in freestanding implementations.
- <td>
- <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?
+<td>Add 18.8, initializer lists,
+<initializer_list>, to the end of the table.
- <p align="left"><br>
+<td>LWG is interested in
+ N2814, but we're concerned whether CWG will accept
+ language recommendations.
- <td>
- <p align="left">Either strike the references to abort,
- at_exit and exit, or clarify which headers only require
- partial support.
+<tr valign="top">
+<td>JP23
- <td>
- <p>
+<td>17.6.2.4
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 172
+<td>2<sup>nd</sup> <font size="2"
+style="font-size: 11pt">para, Table 15</font>
- <td>
- <p align="justify">17.6.2.4
+<td>te
- <td>
- <p align="justify">3
+<td>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.
- <td>
- <p align="justify">Te
+<p>
+<br>
- <td>
- <p align="left">No reference to
- new functions quick_exit and at_quick_exit
+<td>Add
+<type_traits>, <array>, <ration> to Table
+15.
- <p align="left"><br>
+<td>LWG is interested in
+ N2814, but we're concerned whether CWG will accept
+ language recommendations.<p>
- <td>
- <p align="left">Add reference to quick_exit and
- at_quick_exit
+ add <type_traits> only. Alisdair will draft an issue.
- <td>
- <p>
+<tr valign="top">
+<td>UK174
- NAD. We do not belive at_exit and at_quick_exit should be required by
- freestanding implementations.<tr valign="top">
- <td>
- <p>UK<br>
- 173
+<td>17.6.3.2
- <td>
- <p align="justify">17.6.2.4
+<td>3
- <td>
- <p align="justify">table 15
+<td>Ed
- <td>
- <p align="justify">Te
+<td>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.
- <td>
- <p align="left">
- <initializer_list> is missing from headers required
- in freestanding implementations.
+<td>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'
- <p align="left"><br>
+<td>[Being reviewed by Editor]
- <td>
- <p align="left">Add 18.8, initializer lists,
- <initializer_list>, to the end of the table.
+<tr valign="top">
+<td>UK175
- <td>
- <p>
+<td>17.6.4.2.1
- LWG is interested in
- N2814, but we're concerned whether CWG will accept
- language recommendations.<tr valign="top">
- <td>
- <p>JP 23
-
- <td>
- <p align="left">17.6.2.4
-
- <td>
- <p align="left">2<sup>nd</sup> <font size="2"
- style="font-size: 11pt">para, Table 15</font>
-
- <td>
- <p>te
-
- <td>
- <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>
- <p align="left" style="margin-top: 0.04in">Add
- <type_traits>, <array>, <ration> to Table
- 15.
+<td>2
- <td>
- <p>
+<td>Te
- LWG is interested in
- N2814, but we're concerned whether CWG will accept
- language recommendations.<p>
+<td>Local types can
+now be used to instantiate templates, but don't have
+external linkage
- add <type_traits> only. Alisdair will draft an issue.<tr valign="top">
- <td>
- <p>UK<br>
- 174
+<td>Remove the reference to external linkage
- <td>
- <p align="justify">17.6.3.2
+<td>we accept the proposed solution. Martin will draft an issue.
- <td>
- <p align="justify">3
+<tr valign="top">
+<td>UK176
- <td>
- <p align="justify">Ed
+<td>17.6.4.3.3
- <td>
- <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.
+<td>Footnote 175
- <p align="left"><br>
+<td>Ed
- <td>
- <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>Reference to namespace ::std should be
+17.6.4.2
- <td>
- <p>
+<td>Change referfence from 17.6.4.3 to 17.6.4.2
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 175
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">17.6.4.2.1
+<tr valign="top">
+<td>UK177
- <td>
- <p align="justify">2
+<td>17.6.4.3.4
- <td>
- <p align="justify">Te
+<td>3
- <td>
- <p align="left">Local types can
- now be used to instantiate templates, but don't have
- external linkage
+<td>Ed
- <p align="left"><br>
+<td>Sentence is
+redundant as double underscores are reserved in all
+contexts by 17.6.4.3.3
- <td>
- <p align="left">Remove the reference to external linkage
+<td>Strike the sentence
- <td>
- <p>
+<td>[Being reviewed by Editor]
- we accept the proposed solution. Martin will draft an issue.<tr valign="top">
- <td>
- <p>UK<br>
- 176
+<tr valign="top">
+<td>UK178
- <td>
- <p align="justify">17.6.4.3.3
+<td>17.6.4.8
- <td>
- <p align="justify">Footnote 175
+<td>2
- <p align="justify"><br>
+<td>Ed
- <td>
- <p align="justify">Ed
+<td>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>
- <p align="left">Reference to namespace ::std should be
- 17.6.4.2
+<td>Strike the sentence
- <td>
- <p align="left">Change referfence from 17.6.4.3 to 17.6.4.2
+<td>[Being reviewed by Editor]
- <td>
- <p>
+<tr valign="top">
+<td>UK179
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 177
+<td>17.6.4.8
- <td>
- <p align="justify">17.6.4.3.4
+<td>2
- <td>
- <p align="justify">3
+<td>Te
- <td>
- <p align="justify">Ed
+<td>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.
- <td>
- <p align="left">Sentence is
- redundant as double underscores are reserved in all
- contexts by 17.6.4.3.3
+<td>Replace the word 'throws' with 'propogates'
- <p align="left"><br>
+<td>Agreed. Alisdair will draft an issue.
- <td>
- <p align="left">Strike the sentence
+<tr valign="top">
+<td>JP22
- <td>
- <p>
+<td>17.6.5.7
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 178
+<td>4<sup>th</sup> <font size="2"
+style="font-size: 11pt">para, 1<sup>st</sup>
+line</font>
- <td>
- <p align="justify">17.6.4.8
+<td>ed
- <td>
- <p align="justify">2
+<td>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 ]
- <td>
- <p align="justify">Ed
+<p>In
+such case, “among” is preferred instead of
+“between”.
- <td>
- <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>
+Change "between threads" to "among threads".
- <td>
- <p align="left">Strike the sentence
+<p>
+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>
- <p>
+<td>[Being reviewed by Editor]
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 179
+<tr valign="top">
+<td><a name="UK180">UK180</a>
- <td>
- <p align="justify">17.6.4.8
+<td>17.6.5.10
- <td>
- <p align="justify">2
+<td>1, 4
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <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.
+<td>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>Add restriction that exception
+specification of virtual functions cannot be tightened.
- <td>
- <p align="left">Replace the word 'throws' with 'propogates'
+<td>NAD, the standard already has the desired restriction.
- <td>
- <p>
+<tr valign="top">
+<td>UK181
- Agreed. Alisdair will draft an issue.<tr valign="top">
- <td>
- <p>JP 22
+<td>17.6.5.10
- <td>
- <p align="left">17.6.5.7
+<td>Footnote 186
- <td>
- <p align="left">4<sup>th</sup> <font size="2"
- style="font-size: 11pt">para, 1<sup>st</sup>
- line</font>
+<td>Te
- <td>
- <p>ed
+<td>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
- <td>
- <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 ]
+<td>Clarify that this note does not mean the
+functions are genuinely declared with the specification,
+but are treated as-if.
- <p align="left" style="margin-top: 0.04in">In
- such case, “among” is preferred instead of
- “between”.
+<td>We agree that the footnote is wrong and it will be removed. Pete will handle
+ as editorial.
- <td>
- <p align="left">
- Change "between threads" to "among threads".
+<tr valign="top">
+<td>UK182
- <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>17.6.5.10
- <td>
- <p>
+<td>Footnote 188
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p><a name="UK180">UK<br>
- 180</a>
+<td>Te
- <td>
- <p align="justify">17.6.5.10
+<td>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.
- <td>
- <p align="justify">1, 4
+<td>Make this footnote normative
- <td>
- <p align="justify">Te
+<td>NAD. We cannot mandate all standard-library functions that might use some
+ third-party library.
- <td>
- <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.
+<tr valign="top">
+<td>UK184
- <p align="left"><br>
+<td>18 -> 30
- <td>
- <p align="left">Add restriction that exception
- specification of virtual functions cannot be tightened.
+<td>
- <td>
- <p>
+<td>Ed
- NAD, the standard already has the desired restriction.<tr valign="top">
- <td>
- <p>UK<br>
- 181
+<td>The new
+alias-declaration syntax is generally easier to read than a
+typedef declaration. This is especially true for complex
+types like function pointers.
- <td>
- <p align="justify">17.6.5.10
+<td>Replace all typedef declarations in the
+standard library with alias-declarations, except in the
+standard C library.
- <td>
- <p align="justify">Footnote 186
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">Te
+<tr valign="top">
+<td>JP24
- <td>
- <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
+<td>18
- <p align="left"><br>
+<td>2<sup>nd</sup> <font size="2"
+style="font-size: 11pt">para, Table 16</font>
- <td>
- <p align="left">Clarify that this note does not mean the
- functions are genuinely declared with the specification,
- but are treated as-if.
+<td>ed
- <td>
- <p>
+<td>
+Subclauses are listed in Table 16 as:
- We agree that the footnote is wrong and it will be removed. Pete will handle
- as editorial.<tr valign="top">
- <td>
- <p>UK<br>
- 182
+<p style=
+"text-indent: 0.06in; margin-bottom: 0in">"18.6 Type
+identification …"
- <td>
- <p align="justify">17.6.5.10
+<p style=
+"text-indent: 0.06in; margin-bottom: 0in">"18.8 Initializer
+lists …"
- <td>
- <p align="justify">Footnote 188
+<p style=
+"text-indent: 0.06in; margin-top: 0.04in">"18.7 Exception
+handling …".
- <td>
- <p align="justify">Te
+<td><p style=
+"margin-left: 0.06in; text-indent: -0.06in; margin-bottom: 0in">
+Sort them in the increasing order<br>
+"18.6 Type identification …"
- <td>
- <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 style=
+"text-indent: 0.06in; margin-bottom: 0in">"18.7 Exception
+handling …".
- <p align="left"><br>
+<p style=
+"text-indent: 0.06in; margin-top: 0.04in; margin-bottom: 0.04in">
+"18.8 Initializer lists …"
- <td>
- <p align="left">Make this footnote normative
+<p style=
+"text-indent: 0.06in; margin-top: 0.04in"><br>
- <td>
- <p>
+<td>[Being reviewed by Editor]
- NAD. We cannot mandate all standard-library functions that might use some
- third-party library.<tr valign="top">
- <td>
- <p>UK<br>
- 184
+<tr valign="top">
+<td>JP25
- <td>
- <p align="justify">18 -> 30
+<td>18.1
- <td>
- <p align="justify"><br>
+<td>
+6<sup>th</sup> <font size="2" style=
+"font-size: 11pt">para , last line, SEE ALSO</font>
- <td>
- <p align="justify">Ed
+<td>ed
- <td>
- <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.
+<td>
+max_align_t is described in 18.1, so add 3.11 Alignment as
+the reference.
- <p align="left"><br>
+<td>Add
+"<u>3.11, Alignment</u><font color="#000000">" to</font>
+<font size="2" style="font-size: 11pt">SEE ALSO.</font>
- <td>
- <p align="left">Replace all typedef declarations in the
- standard library with alias-declarations, except in the
- standard C library.
+<td>[Being reviewed by Editor]
- <td>
- <p>
+<tr valign="top">
+<td>FR32
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>JP 24
+<td>18.2.1<br>
+ [Numeric<br>
+ limits]
- <td>
- <p align="left">18
+<td>
- <td>
- <p align="left">2<sup>nd</sup> <font size="2"
- style="font-size: 11pt">para, Table 16</font>
+<td>te
- <td>
- <p>ed
+<td>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.
- <td>
- <p align="left">
- Subclauses are listed in Table 16 as:
+<p>
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">"18.6 Type
- identification …"
+<td>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.
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">"18.8 Initializer
- lists …"
+<td>Alisdair and Gaby will work on a resolution.
- <p align="left" style=
- "text-indent: 0.06in; margin-top: 0.04in">"18.7 Exception
- handling …".
+<tr valign="top">
+<td>DE16
- <td>
- <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 …"
+<td>18.2.1
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">"18.7 Exception
- handling …".
+<td>
- <p align="left" style=
- "text-indent: 0.06in; margin-top: 0.04in; margin-bottom: 0.04in">
- "18.8 Initializer lists …"
+<td>te
- <p align="left" style=
- "text-indent: 0.06in; margin-top: 0.04in"><br>
+<td>DE16 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
+.
- <td>
- <p>
+<p>
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>JP 25
+<td>Specify a concept requirement with fewer constraints as
+appropriate, for example SemiRegular.
- <td>
- <p align="left">18.1
+<td>Alisdair and Gaby will work on a resolution.
- <td>
- <p align="left">
- 6<sup>th</sup> <font size="2" style=
- "font-size: 11pt">para , last line, SEE ALSO</font>
+<tr valign="top">
+<td>JP26
- <p align="left"><br>
+<td>18.2.1.1
- <td>
- <p>ed
+<td>
- <td>
- <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>te
- <td>
- <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>
+numeric_limits does not use concept.
- <td>
- <p>
+<td>
+Correct as follows.
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>FR 32
+<p>
+<br>
- <td>
- <p>18.2.1<br>
- [Numeric<br>
- limits]
+<p>
+template<class T> class numeric_limits<const
+T>;
- <td>
- <p>
+<p>
+template<class T> class numeric_limits<volatile
+T>;
- <td>
- <p>te
+<p>
+template<class T> class numeric_limits<const
+volatile T>;
- <td>
- <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>
+<br>
- <p>
+<p>
+should be
- <td>
- <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.
+<p>
+<br>
- <td>
- <p>
+<p>
+template<<u>Regular</u> T> class
+numeric_limits<const T>;
- Alisdair and Gaby will work on a resolution.<tr valign="top">
- <td>
- <p>DE-16
+<p>
+template<<u>Regular</u> T> class
+numeric_limits<volatile T>;
- <td>
- <p>18.2.1
+<p>
+template<<u>Regular</u> T> class
+numeric_limits<const volatile T>;
- <td>
- <p>
+<td>Alisdair will work on a resolution.
- <td>
- <p>te
+<tr valign="top">
+<td>DE17
- <td>
- <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
- .
+<td>18.2.6
- <p>
+<td>
- <td>
- <p>Specify a concept requirement with fewer constraints as
- appropriate, for example SemiRegular.
+<td>te
- <td>
- <p>
+<td>DE17 The class
+type_index should be removed; it provides no additional
+functionality beyond providing appropriate concept maps.
- Alisdair and Gaby will work on a resolution.<tr valign="top">
- <td>
- <p>JP 26
+<p>
- <td>
- <p align="left">18.2.1.1
+<td>Specify concept maps for "const type_info *" as required
+by the ordered and unordered containers and remove the
+class type_index.
- <td>
- <p align="left"><br>
+<td>Doug will open an issue.
- <td>
- <p>te
+<tr valign="top">
+<td>UK185
- <td>
- <p align="left" style="margin-top: 0.04in">
- numeric_limits does not use concept.
+<td>18.3.1
- <td>
- <p align="left">
- Correct as follows.
+<td>2
- <p align="left">
- <br>
+<td>Ed
- <p align="left">
- template<class T> class numeric_limits<const
- T>;
+<td>There is no
+header <stdint>, it should either be <stdint.h>
+or <cstdint>
- <p align="left">
- template<class T> class numeric_limits<volatile
- T>;
+<td>Replace <stdint> with <cstdint>
- <p align="left">
- template<class T> class numeric_limits<const
- volatile T>;
+<td>[Being reviewed by Editor]
- <p align="left">
- <br>
+<tr valign="top">
+<td>DE18
- <p align="left">
- should be
+<td>18.4
- <p align="left">
- <br>
+<td>
- <p align="left">
- template<<u>Regular</u> T> class
- numeric_limits<const T>;
+<td>te
- <p align="left">
- template<<u>Regular</u> T> class
- numeric_limits<volatile T>;
+<td>DE18 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 align="left">
- template<<u>Regular</u> T> class
- numeric_limits<const volatile T>;
+<p>
- <p align="left"><br>
+<td>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>
- <p>
+<td>Straw polls: pointer safety: 9-1-10; threading: 14-2-9. Jens will open
+ multiple issues.
- Alisdair will work on a resolution.<tr valign="top">
- <td>
- <p>DE-17
+<tr valign="top">
+<td>UK186
- <td>
- <p>18.2.6
+<td>18.4
- <td>
- <p>
+<td>Footnote 221
- <td>
- <p>te
+<td>Ed
- <td>
- <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.
+<td>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>
+<td>Remove the footnote
- <td>
- <p>Specify concept maps for "const type_info *" as required
- by the ordered and unordered containers and remove the
- class type_index.
+<td>[Being reviewed by Editor]
- <td>
- <p>
+<tr valign="top">
+<td>UK187
- Doug will open an issue.<tr valign="top">
- <td>
- <p>UK<br>
- 185
+<td>18.4
- <td>
- <p align="justify">18.3.1
+<td>9
- <td>
- <p align="justify">2
+<td>Te
- <td>
- <p align="justify">Ed
+<td>The term "thread
+safe" is not defined nor used in this context anywhere else
+in the standard.
- <td>
- <p align="left">There is no
- header <stdint>, it should either be <stdint.h>
- or <cstdint>
+<td>Clarify the intended meaing of "thread
+safe"
- <p align="left"><br>
+<td>Lawrence Crowl will open an issue.
- <td>
- <p align="left">Replace <stdint> with <cstdint>
+<tr valign="top">
+<td>UK188
- <td>
- <p>
+<td>18.4
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>DE-18
+<td>12
- <td>
- <p>18.4
+<td>Te
- <td>
- <p>
+<td>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?
- <td>
- <p>te
+<td>Depends on where _Exit comes from
- <td>
- <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.
+<td>Agreed. Bill Plauger will open an issue.
- <p>
+<tr valign="top">
+<td>UK189
- <td>
- <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>18.4, 18.7
- <td>
- <p>
+<td>
- Straw polls: pointer safety: 9-1-10; threading: 14-2-9. Jens will open
- multiple issues.<tr valign="top">
- <td>
- <p>UK<br>
- 186
+<td>Te
- <td>
- <p align="justify">18.4
+<td>The addition of the [[noreturn]] attribute
+to the language will be an important aid for static
+analysis tools.
- <td>
- <p align="justify">Footnote 221
+<td>The following
+functions should be declared in C++ with the [[noreturn]]
+attribute: abort exit quick_exit terminate unexpected
+rethrow_exception throw_with_nested
- <td>
- <p align="justify">Ed
+<td>Agreed. Howard will open an issue.
- <td>
- <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.
+<tr valign="top">
+<td>JP27
- <p align="left"><br>
+<td>18.4, 18.9,<br>
+ 18.7.2.2,<br>
+ 18.7.3.1
- <td>
- <p align="left">Remove the footnote
+<td>
- <td>
- <p>
+<td>te
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 187
+<td>
+There are Standard library functions that never return to
+the caller. They are explained so in the Standard but not
+declared explicitly.
- <td>
- <p align="justify">18.4
+<td>
+Consider to add the attribute [[noreturn]] to such
+functions,
- <td>
- <p align="justify">9
+<p>
+<br>
- <td>
- <p align="justify">Te
+<p>
+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,
- <td>
- <p align="left">The term "thread
- safe" is not defined nor used in this context anywhere else
- in the standard.
+<p>
+18.7.6 rethrow_nested
- <p align="left"><br>
+<p>18.7.6
+throw_with_nested<br>
+18.9: longjmp.
- <td>
- <p align="left">Clarify the intended meaing of "thread
- safe"
+<p>
+<br>
- <td>
- <p>
+<td>See UK 180
- Lawrence Crowl will open an issue.<tr valign="top">
- <td>
- <p>UK<br>
- 188
+<tr valign="top">
+<td>UK190
- <td>
- <p align="justify">18.4
+<td>18.5.1
- <td>
- <p align="justify">12
+<td>various
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <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?
+<td>It is not entirely clear how the current
+specification acts in the presence of a garbage collected
+implementation.
- <p align="left"><br>
+<td>All deallocation
+functions taking a pointer parameter should have a
+Precondition : ptr is a safely-derived pointer value.
- <td>
- <p align="left">Depends on where _Exit comes from
+<td>agreed. Alisdair will open an issue.
- <td>
- <p>
+<tr valign="top">
+<td>UK191
- Agreed. Bill Plauger will open an issue.<tr valign="top">
- <td>
- <p>UK<br>
- 189
+<td>18.5.1.1
- <td>
- <p align="justify">18.4, 18.7
+<td>4
- <td>
- <p align="justify"><br>
+<td>Ed
- <td>
- <p align="justify">Te
+<td>According to the second bullet, behaviour
+becomes undefined (for lack of a specification) if the user
+has not yet called set_new_handler.
- <td>
- <p align="left">The addition of the [[noreturn]] attribute
- to the language will be an important aid for static
- analysis tools.
+<td>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.
- <td>
- <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
+<td>[Being reviewed by Editor]
- <p align="left"><br>
+<tr valign="top">
+<td>UK192
- <td>
- <p>
+<td>18.5.1.2
- Agreed. Howard will open an issue.<tr valign="top">
- <td>
- <p>JP 27
+<td>
- <td>
- <p align="left">18.4, 18.9,<br>
- 18.7.2.2,<br>
- 18.7.3.1
+<td>Te
- <td>
- <p align="left"><br>
+<td>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.
- <td>
- <p>te
+<td>Fix 5.3.4p7 by required std::bad_alloc
+rather than std::length_error
- <td>
- <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>Howard will open a CWG issue referring to N2814.
- <td>
- <p align="left">
- Consider to add the attribute [[noreturn]] to such
- functions,
+<tr valign="top">
+<td>UK193
- <p align="left">
- <br>
+<td>18.5.2.2
- <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,
+<td>2
- <p align="left">
- 18.7.6 rethrow_nested
+<td>Te
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">18.7.6
- throw_with_nested<br>
- 18.9: longjmp.
+<td>quick_exit has
+been added as a new valid way to terminate a program in a
+well defined way
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>Change 3rd bullet: call either abort(),
+exit() or quick_exit();
- <td>
- <p>
+<td>change "call either abort() or exit()" to terminate the program. Bill
+ Plauger will open an issue.
- See UK 180<tr valign="top">
- <td>
- <p>UK<br>
- 190
+<tr valign="top">
+<td>UK194
- <td>
- <p align="justify">18.5.1
+<td>18.6
- <td>
- <p align="justify">various
+<td>
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <p align="left">It is not entirely clear how the current
- specification acts in the presence of a garbage collected
- implementation.
+<td>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.
- <td>
- <p align="left">All deallocation
- functions taking a pointer parameter should have a
- Precondition : ptr is a safely-derived pointer value.
+<td>Move type_index and hash<type_index>
+out of <typeinfo> and into a new header,
+<typeindex>.
- <p align="left"><br>
+<td>already handled by the free-standing paper.
- <td>
- <p>
+<tr valign="top">
+<td>JP28
- agreed. Alisdair will open an issue.<tr valign="top">
- <td>
- <p>UK<br>
- 191
+<td>18.6,<br>
+ 18.7,<br>
+ 19.1
- <td>
- <p align="justify">18.5.1.1
+<td>
- <td>
- <p align="justify">4
+<td>te
- <td>
- <p align="justify">Ed
+<td>
+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.
- <td>
- <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>
+Consider other types.
- <td>
- <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.
+<td>NAD. There is already guidance in the CD. It is the caller's responsibility
+ to internationalize MB character string.
- <p align="left"><br>
+<tr valign="top">
+<td>JP29
- <td>
- <p>
+<td>18.7.6
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 192
+<td>
- <td>
- <p align="justify">18.5.1.2
+<td>te
- <td>
- <p align="justify"><br>
+<td>
+throw_with_nested does not use concept.
- <td>
- <p align="justify">Te
+<td>
+Correct as follows.
- <td>
- <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>
+template<class T> void throw_with_nested(T&&
+t); // [[noreturn]]
- <p align="left"><br>
+<p>
+<br>
- <td>
- <p align="left">Fix 5.3.4p7 by required std::bad_alloc
- rather than std::length_error
+<p style=
+"text-indent: 0.06in; margin-bottom: 0in">should be
- <td>
- <p>
+<p>
+<br>
- Howard will open a CWG issue referring to N2814.<tr valign="top">
- <td>
- <p>UK<br>
- 193
+<p>
+template<CopyConstructible T> void
+throw_with_nested(T&& t); // [[noreturn]]
- <td>
- <p align="justify">18.5.2.2
+<td>Alisdair will open an issue.
- <td>
- <p align="justify">2
+<tr valign="top">
+<td>JP30
- <td>
- <p align="justify">Te
+<td>18.7.6
- <td>
- <p align="left">quick_exit has
- been added as a new valid way to terminate a program in a
- well defined way
+<td>
- <p align="left"><br>
+<td>te
- <td>
- <p align="left">Change 3rd bullet: call either abort(),
- exit() or quick_exit();
+<td>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>
- <p>
+<td>
+Consider nested_exception to support tree structure.
- change "call either abort() or exit()" to terminate the program. Bill
- Plauger will open an issue.<tr valign="top">
- <td>
- <p>UK<br>
- 194
+<td>Howard will ping Bill Plauger to request more information.
- <td>
- <p align="justify">18.6
+<tr valign="top">
+<td>JP31
- <td>
- <p align="justify"><br>
+<td>18.7.6
- <td>
- <p align="justify">Te
+<td>
- <td>
- <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.
+<td>te
- <p align="left"><br>
+<td>It
+is difficult to understand in which case nested_exception
+is applied.
- <td>
- <p align="left">Move type_index and hash<type_index>
- out of <typeinfo> and into a new header,
- <typeindex>.
+<td>Consider to add
+a sample program which rethrows exception.
- <td>
- <p>
+<p>
+<br>
- already handled by the free-standing paper.<tr valign="top">
- <td>
- <p>JP 28
+<td>Alisdair will incorporate this in the JP29 paper.
- <td>
- <p align="left">18.6,<br>
- 18.7,<br>
- 19.1
+<tr valign="top">
+<td>UK195
- <td>
- <p align="left"><br>
+<td>18.8
- <td>
- <p>te
+<td>
- <td>
- <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.
+<td>Te
- <p align="left"><br>
+<td>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.
- <td>
- <p align="left" style="margin-top: 0.04in">
- Consider other types.
+<td>Delete the two concept maps from
+std::initializer_list.
- <td>
- <p>
+<td>will be handled in connection with the free-standing paper.
- NAD. There is already guidance in the CD. It is the caller's responsibility
- to internationalize MB character string.<tr valign="top">
- <td>
- <p>JP 29
+<tr valign="top">
+<td>UK196
- <td>
- <p align="left">18.7.6
+<td>18.8.3
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p>te
+<td>Te
- <td>
- <p align="left" style="margin-top: 0.04in">
- throw_with_nested does not use concept.
+<td>Concept maps for initializer_list to Range
+should not be in language support headers, but instead in
+iterator concepts.
- <td>
- <p align="left">
- Correct as follows.
+<td>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">
- template<class T> void throw_with_nested(T&&
- t); // [[noreturn]]
+<td>will be handled in connection with the free-standing paper.
- <p align="left">
- <br>
+<tr valign="top">
+<td>UK197
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
+<td>19
- <p align="left">
- <br>
+<td>
- <p align="left">
- template<CopyConstructible T> void
- throw_with_nested(T&& t); // [[noreturn]]
+<td>Te
- <p align="left"><br>
+<td>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>
- <p>
+<td>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.
- Alisdair will open an issue.<tr valign="top">
- <td>
- <p>JP 30
+<td>NAD. Implementations are permitted to add the requested signature under the
+ as-if rule.
- <td>
- <p align="left">18.7.6
+<tr valign="top">
+<td>JP32
- <td>
- <p align="left"><br>
+<td>19.1
- <td>
- <p>te
+<td>
- <td>
- <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>te
- <td>
- <p align="left" style="margin-top: 0.04in">
- Consider nested_exception to support tree structure.
+<td>
+Messages returned by the member function what() of standard
+exception classes seem difficult to judge.
- <td>
- <p>
+<p>For
+example, following messages are returned by what() of
+std::bad_alloc of existing implementations:
- Howard will ping Bill Plauger to request more information.<tr valign="top">
- <td>
- <p>JP 31
+<p>
+<br>
- <td>
- <p align="left">18.7.6
+<p>
+Compiler: Message returned by what()
- <td>
- <p align="left"><br>
+<p>
+---------------------------------------------
- <td>
- <p>te
+<p>
+Borland C++ 5.6.4: no named exception thrown
- <td>
- <p align="left" style="margin-top: 0.04in">It
- is difficult to understand in which case nested_exception
- is applied.
+<p>
+Visual C++ 8.0: bad allocation
- <td>
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Consider to add
- a sample program which rethrows exception.
+<p>
+Code Warrior 8.0: exception
- <p align="left" style="margin-top: 0.04in">
- <br>
+<p>g++
+3.4.4: St9exception
- <td>
- <p>
+<p>
+<br>
- Alisdair will incorporate this in the JP29 paper.<tr valign="top">
- <td>
- <p>UK<br>
- 195
+<p>It is difficult
+to recognize what exception was thrown when using those
+compilers except Visual C++.
- <td>
- <p align="justify">18.8
+<p>
+<br>
- <td>
- <p align="justify"><br>
+<td>
+Consider to add footnote that recommends what() returns
+message easy to recognize what exception was thrown.
- <td>
- <p align="justify">Te
+<td>NAD. Q of I.
- <td>
- <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.
+<tr valign="top">
+<td>US64
- <p align="left"><br>
+<td>19.3
- <td>
- <p align="left">Delete the two concept maps from
- std::initializer_list.
+<td>1
- <td>
- <p>
+<td>Ge
- will be handled in connection with the free-standing paper.<tr valign="top">
- <td>
- <p>UK<br>
- 196
+<td><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>
- <p align="justify">18.8.3
+<td>Delete this
+cross reference. If necessary, expand the main text to
+include the relevant referenced text
- <td>
- <p align="justify"><br>
+<p>
- <td>
- <p align="justify">Te
+<td>We believe that this is editorial.
- <td>
- <p align="left">Concept maps for initializer_list to Range
- should not be in language support headers, but instead in
- iterator concepts.
+<tr valign="top">
+<td><a name="US65">US 65</a>
- <td>
- <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>.
+<td>20
- <p align="left"><br>
+<td>
- <td>
- <p>
+<td>te
- will be handled in connection with the free-standing paper.<tr valign="top">
- <td>
- <p>UK<br>
- 197
+<td>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>
- <p align="justify">19
+<td>
+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.
- <td>
- <p align="justify"><br>
+<p>
+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>
- <td>
- <p align="justify">Te
+<td>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.<p>Later: US
+65, remove scoped allocators: straw poll, 4 pro - 9 con - 3 abstain, no
+consensus for removing scoped allocators.<p>D2840: straw
+poll, this is the direction we want to go: 11 pro - 0 con - 5 abstain,
+we have consensus. Straw poll, put on format motions page for this
+meeting (pro) or review and consider at next meeting (con): 7 pro - 1
+con - many abstain, consensus for moving as formal motion at this
+meeting.<p>D2840 was renamed
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2840.pdf">
+N2840</a> and was accepted into the WP in Summit.<br>
- <td>
- <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>
- <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.
+<tr valign="top">
+<td><a name="UK198">UK198 </a>
- <p align="left"><br>
+<td>20
- <td>
- <p>
+<td>
- NAD. Implementations are permitted to add the requested signature under the
- as-if rule.<tr valign="top">
- <td>
- <p>JP 32
+<td>Ed
- <td>
- <p align="left">19.1
+<td>The organization of clause 20 could be
+improved to better group related items, making the standard
+easier to navigate.
+
+<td>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
+
+<td>Agree that this is editorial -- forward to project editor. (effective
+ duplicate of US 69)
+
+<tr valign="top">
+<td>UK199
+
+<td>20.1.1, 20.1.2
+
+<td>2
+
+<td>Te
+
+<td>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.
+
+<td>Replace the term 'program' with 'user'.
+
+<td>Agree change 'program' to 'user' in clauses 20.1.1 and 20.1.2
+
+<tr valign="top">
+<td><a name="UK200">UK200</a>
+
+<td>20.1.4
+
+<td>
+
+<td>Te
+
+<td>All standard library use expects Predicates
+to be CopyConstructible, and this should be recognised
+easily without reatedly stating on every use-case.
+
+<td>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.
- <td>
- <p align="left"><br>
+<td>After further
+ discussion of UK200, we do not think adding constraints to predicates is a
+ good idea. Straw poll on UK200: status quo, 5 pro - 2 con; remove
+ copy-constructible, 3 pro - 4 con; pred must be copy-constructible, 4 pro -
+ 3 con; no consensus for moving away from the status quo. <p>
- <td>
- <p>te
+ Also see UK245.
- <td>
- <p align="left">
- Messages returned by the member function what() of standard
- exception classes seem difficult to judge.
+<tr valign="top">
+<td>UK201
- <p align="left">For
- example, following messages are returned by what() of
- std::bad_alloc of existing implementations:
+<td>20.1.5
- <p align="left">
- <br>
+<td>
- <p align="left">
- Compiler: Message returned by what()
+<td>Te
- <p align="left">
- ---------------------------------------------
+<td>The Consistency axiom for
+LessThanComparable will not compile.
- <p align="left">
- Borland C++ 5.6.4: no named exception thrown
+<td>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">
- Visual C++ 8.0: bad allocation
+<td>After consultation with the submitter, we agreed that the suggestion was in
+ error and there is nothing else to be done.
- <p align="left">
- Code Warrior 8.0: exception
+<tr valign="top">
+<td>JP33
- <p align="left">g++
- 3.4.4: St9exception
+<td>20.1.5
- <p align="left">
- <br>
+<td>
- <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++.
+<td>te
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>
+LessThanComparable and EqualityComparable don't correspond
+to NaN.
- <td>
- <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>Apply
+concept_map to these concepts at FloatingPointType
- <td>
- <p>
+<p>
+<br>
- NAD. Q of I.<tr valign="top">
- <td>
- <p>US 64
+<td>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.
- <td>
- <p>19.3
+<tr valign="top">
+<td>US66
- <td>
- <p>1
+<td>20.1.10
- <td>
- <p>Ge
+<td>
- <td>
- <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>te
- <td>
- <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
+<td>Application of the "Regular" concept to floating-point
+types appears to be controversial (see long discussion on
+std-lib reflector).
- <p>
+<td>State that the “Regular” concept does not
+apply to floating-point types.
- <td>
- <p>
+<td>Recommend that we handle the same as JP 33.
- We believe that this is editorial.<tr valign="top">
- <td>
- <p align="left"><a name="US65">US 65</a>
+<tr valign="top">
+<td>JP34
- <td>
- <p align="left">20
+<td>20.2
- <td>
- <p align="left"><br>
+<td>
+1<sup>st</sup> <font size="2" style=
+"font-size: 11pt">para, 4<sup>th</sup> line</font>
- <td>
- <p align="left">te
+<td>ed
- <td>
- <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>
+Though N2672 pointed at adding
+"#include<initializer_list>", it isn't reflected.
- <td>
- <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.
+<td>add
+followings
- <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>
+#include <initializer_list> // for concept_map
- <p align="left"><br>
+<td>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.
- <td>
- <p align="left">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.<p align="left">Later: US
- 65, remove scoped allocators: straw poll, 4 pro - 9 con - 3 abstain, no
- consensus for removing scoped allocators.<p align="left">D2840: straw
- poll, this is the direction we want to go: 11 pro - 0 con - 5 abstain,
- we have consensus. Straw poll, put on format motions page for this
- meeting (pro) or review and consider at next meeting (con): 7 pro - 1
- con - many abstain, consensus for moving as formal motion at this
- meeting.<p align="left">D2840 was renamed
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2840.pdf">
- N2840</a> and was accepted into the WP in Summit.<br>
-
- <tr valign="top">
- <td>
- <p><a name="UK198">UK<br>
- 198 </a>
-
- <td>
- <p align="justify">20
-
- <td>
- <p align="justify"><br>
-
- <td>
- <p align="justify">Ed
-
- <td>
- <p align="left">The organization of clause 20 could be
- improved to better group related items, making the standard
- easier to navigate.
-
- <td>
- <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>
- <p>
-
- Agree that this is editorial -- forward to project editor. (effective
- duplicate of US 69)<tr valign="top">
- <td>
- <p>UK<br>
- 199
-
- <td>
- <p align="justify">20.1.1, 20.1.2
-
- <td>
- <p align="justify">2
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <p align="left">Replace the term 'program' with 'user'.
-
- <td>
- <p>
-
- Agree change 'program' to 'user' in clauses 20.1.1 and 20.1.2<tr valign="top">
- <td>
- <p><a name="UK200">UK<br>
- 200</a>
-
- <td>
- <p align="justify">20.1.4
-
- <td>
- <p align="justify"><br>
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <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.
+<tr valign="top">
+<td>US67
- <p align="left"><br>
+<td>20.2.1
- <td>
- <p>
+<td>¶ 5 first sent.
- After further
- discussion of UK200, we do not think adding constraints to predicates is a
- good idea. Straw poll on UK200: status quo, 5 pro - 2 con; remove
- copy-constructible, 3 pro - 4 con; pred must be copy-constructible, 4 pro -
- 3 con; no consensus for moving away from the status quo. <p>
+<td>ed
- Also see UK245.<tr valign="top">
- <td>
- <p>UK<br>
- 201
+<td>Some connective words are missing.
- <td>
- <p align="justify">20.1.5
+<td>Insert “corresponding to” before “an
+lvalue reference type.”
- <td>
- <p align="justify"><br>
+<td>Yes. Forward to project editor.
- <td>
- <p align="justify">Te
+<tr valign="top">
+<td>JP35
- <td>
- <p align="left">The Consistency axiom for
- LessThanComparable will not compile.
+<td>20.2.3
- <td>
- <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.
+<td>
+6<sup>th</sup> <font size="2" style=
+"font-size: 11pt">para, 1<sup>st</sup> line</font>
- <p align="left"><br>
+<td>ed
- <td>
- <p>
+<td>
+Typo,
- 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>
- <p>JP 33
+<p>"stdforward" should be
+"std::forward"
- <td>
- <p align="left">20.1.5
+<td>Correct typo.
- <td>
- <p align="left"><br>
+<td>Yes. Forward to project editor.
- <td>
- <p>te
+<tr valign="top">
+<td>UK202
- <td>
- <p align="left" style="margin-top: 0.04in">
- LessThanComparable and EqualityComparable don't correspond
- to NaN.
+<td>20.2.4
- <td>
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Apply
- concept_map to these concepts at FloatingPointType
+<td>
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>Ed
- <td>
- <p>
+<td>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.
- 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>
- <p>US 66
+<td>Remove the std:: qualification from these
+references to pair.
- <td>
- <p>20.1.10
+<td>Yes. Forward to project editor.
- <td>
- <p>
+<tr valign="top">
+<td>US68
- <td>
- <p>te
+<td>20.2.12
- <td>
- <p>Application of the "Regular" concept to floating-point
- types appears to be controversial (see long discussion on
- std-lib reflector).
+<td>Integral<br>
+Like
- <td>
- <p>State that the “Regular” concept does not
- apply to floating-point types.
+<td>te/ed
- <td>
- <p>
+<td>The code defining the context is syntactically
+incorrect.
- Recommend that we handle the same as JP 33.<tr valign="top">
- <td>
- <p>JP 34
+<td>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>
- <p align="left">20.2
+<td>Editorial. The correct section is 20.1.12, not 20.2.12. Forward to project
+ editor.
- <td>
- <p align="left">
- 1<sup>st</sup> <font size="2" style=
- "font-size: 11pt">para, 4<sup>th</sup> line</font>
+<tr valign="top">
+<td>UK203
- <p align="left"><br>
+<td>20.3.2
- <td>
- <p>ed
+<td>1-4
- <td>
- <p align="left" style="margin-top: 0.04in">
- Though N2672 pointed at adding
- "#include<initializer_list>", it isn't reflected.
+<td>Ed
- <td>
- <p align="left">add
- followings
+<td>The ratio_xyz
+types have a misplaced '}'. For example: template <class
+R1, class R2> struct ratio_add { typedef see below}
+type; ;
- <p align="left" style="margin-top: 0.04in">
- #include <initializer_list> // for concept_map
+<td>Move the '}' to after the typedef: template
+<class R1, class R2> struct ratio_add { typedef see
+below type; };
- <td>
- <p>
+<td>Yes. Forward to project editor.
- 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>
- <p>US 67
+<tr valign="top">
+<td>JP36
- <td>
- <p>20.2.1
+<td>20.4.2.1
- <td>
- <p>¶ 5 first sent.
+<td>
+19<sup>th</sup> <font size="2" style=
+"font-size: 11pt">para, 6<sup>th</sup> line</font>
- <td>
- <p>ed
+<td>ed
- <td>
- <p>Some connective words are missing.
+<td>
+Typo.
- <td>
- <p>Insert “corresponding to” before “an
- lvalue reference type.”
+<p>"it
+it" should be "it is"
- <td>
- <p>
+<td>
+Correct typo.
- Yes. Forward to project editor.<tr valign="top">
- <td>
- <p>JP 35
+<td>Yes. Forward to project editor.
- <td>
- <p align="left">20.2.3
+<tr valign="top">
+<td>UK204
- <td>
- <p align="left">
- 6<sup>th</sup> <font size="2" style=
- "font-size: 11pt">para, 1<sup>st</sup> line</font>
+<td>20.5
- <p align="left"><br>
+ [meta.<br>
+trans.<br>
+other]<td>Table 41
- <td>
- <p>ed
+<td>Te
- <td>
- <p align="left">
- Typo,
+<td>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">"stdforward" should be
- "std::forward"
+<td>Restore aligned_union template that was
+removed by LWG issue 856.
- <td>
- <p align="left">Correct typo.
+<td>Agree. The need for aligned_union is compelling enough to reinstate.
- <td>
- <p>
+<tr valign="top">
+<td><a name="US69">US69</a>
- Yes. Forward to project editor.<tr valign="top">
- <td>
- <p>UK<br>
- 202
+<td>20.5
- <td>
- <p align="justify">20.2.4
+<td>
- <td>
- <p align="justify"><br>
+<td>ed
- <td>
- <p align="justify">Ed
+<td>This section, dealing with tuple<>, should be in
+the same section as the similar utility pair<>.
- <td>
- <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.
+<td>Restructure Clause 20 so as to bring these similar
+components together.
- <p align="left"><br>
+<td>Editorial (effective duplicate of UK 198). Forward to project editor.
- <td>
- <p align="left">Remove the std:: qualification from these
- references to pair.
+<tr valign="top">
+<td>UK205
- <td>
- <p>
+<td>20.5.3
- Yes. Forward to project editor.<tr valign="top">
- <td>
- <p>US 68
+<td>
- <td>
- <p>20.2.12
+<td>Te
- <td>
- <p>Integral<br>
- Like
+<td>
+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.
- <td>
- <p>te/ed
+<td>Add a constexpr conversion operator to
+class tempalate integral_constant: constexpr operator
+value_type() { return value; }
- <td>
- <p>The code defining the context is syntactically
- incorrect.
+<td>Agree: Add a constexpr conversion operator to class template
+ integral_constant: <code>constexpr operator value_type() { return value; }</code>
- <td>
- <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.
+<tr valign="top">
+<td>UK206
- <td>
- <p>
+<td>20.5.5
- Editorial. The correct section is 20.1.12, not 20.2.12. Forward to project
- editor.<tr valign="top">
- <td>
- <p>UK<br>
- 203
+<td>para 4
- <td>
- <p align="justify">20.3.2
+<td>Te
- <td>
- <p align="justify">1-4
+<td>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.
- <td>
- <p align="justify">Ed
+<td>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>
- <p align="left">The ratio_xyz
- types have a misplaced '}'. For example: template <class
- R1, class R2> struct ratio_add { typedef see below}
- type; ;
+<td>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:"
- <p align="left"><br>
+<tr valign="top">
+<td>UK207
- <td>
- <p align="left">Move the '}' to after the typedef: template
- <class R1, class R2> struct ratio_add { typedef see
- below type; };
+<td>20.5.6.1
- <td>
- <p>
+<td>Table 36
- Yes. Forward to project editor.<tr valign="top">
- <td>
- <p>JP 36
+<td>Ed
- <td>
- <p align="left">20.4.2.1
+<td>suffix "::type" is missing from the some of
+the examples.
- <td>
- <p align="left">
- 19<sup>th</sup> <font size="2" style=
- "font-size: 11pt">para, 6<sup>th</sup> line</font>
+<td>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>We tend to agree. Forward to project editor. Also recommend that the word
+ "is" be replaced with "evaluates to" in the same text.
- <td>
- <p>ed
+<tr valign="top">
+<td>JP37
- <td>
- <p align="left">
- Typo.
+<td>20.5.7
- <p align="left" style="margin-top: 0.04in">"it
- it" should be "it is"
+<td>Table 41
- <td>
- <p align="left" style="margin-top: 0.04in">
- Correct typo.
+<td>ed
- <td>
- <p>
+<td>
+Typo.
- Yes. Forward to project editor.<tr valign="top">
- <td>
- <p>UK<br>
- 204
+<p style=
+"text-indent: 0.19in; margin-bottom: 0in">There isn't a
+period at the end of enable_if's comments.
- <td>
- <p align="justify">20.5
+<p>
+<br>
- [meta.<br>
- trans.<br>
- other]<td>
- <p align="justify">Table 41
+<p>If
+B is true, the member typedef type shall equal T;
+otherwise, there shall be no member typedef type
- <td>
- <p align="justify">Te
+<p>
+<br>
- <td>
- <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>
+should be
- <p align="left"><br>
+<p>
+<br>
- <td>
- <p align="left">Restore aligned_union template that was
- removed by LWG issue 856.
+<p>If
+B is true, the member typedef type shall equal T;
+otherwise, there shall be no member typedef type.
- <td>
- <p>
+<td>Add
+”.”
- Agree. The need for aligned_union is compelling enough to reinstate.<tr valign="top">
- <td>
- <p><a name="US69">US 69</a>
+<td>Agree. Forward to project editor.
- <td>
- <p>20.5
+<tr valign="top">
+<td>US70
- <td>
- <p>
+<td>20.5 [meta]<td>
- <td>
- <p>ed
+<td>te
- <td>
- <p>This section, dealing with tuple<>, should be in
- the same section as the similar utility pair<>.
+<td>Specifications now expressed via narrative text are more
+accurately and clearly expressed via executable code.
- <td>
- <p>Restructure Clause 20 so as to bring these similar
- components together.
+<td>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.
- <td>
- <p>
+<p>
- Editorial (effective duplicate of UK 198). Forward to project editor.<tr valign="top">
- <td>
- <p>UK<br>
- 205
+<td>(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.
- <td>
- <p align="justify">20.5.3
+<tr valign="top">
+<td>US71
- <td>
- <p align="justify"><br>
+<td>20.6.7 [meta.<br>
+trans.<br>
+other]<td>Table 51, last row, column 3
- <td>
- <p align="justify">Te
+<td>ed
- <td>
- <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.
+<td>The grammar is incorrect.
- <p align="left"><br>
+<td>Change “conversion are” to “conversion
+is”.
- <td>
- <p align="left">Add a constexpr conversion operator to
- class tempalate integral_constant: constexpr operator
- value_type() { return value; }
+<td>(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.
- <td>
- <p>
+<tr valign="top">
+<td>DE20
- Agree: Add a constexpr conversion operator to class template
- integral_constant: <code>constexpr operator value_type() { return value; }</code><tr valign="top">
- <td>
- <p>UK<br>
- 206
+<td>20.6.12 [bind]
- <td>
- <p align="justify">20.5.5
+<td>
- <td>
- <p align="justify">para 4
+<td>ed
- <td>
- <p align="justify">Te
+<td>DE20 The section heading and the first sentence use the term
+"template function", which is undefined.
- <td>
- <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.
+<td>Replace "template function"
+by "function template".
- <p align="left"><br>
+<p>
- <td>
- <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>Agree. Forward to the project editor.</tr>
+
- <td>
- <p>
+<tr valign="top">
+<td><a name="US72">US72</a>
- 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>
- <p>UK<br>
- 207
-
- <td>
- <p align="justify">20.5.6.1
-
- <td>
- <p align="justify">Table 36
-
- <td>
- <p align="justify">Ed
-
- <td>
- <p align="left">suffix "::type" is missing from the some of
- the examples.
-
- <td>
- <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>
- <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>
- <p>JP 37
-
- <td>
- <p align="left">20.5.7
-
- <td>
- <p align="left">Table 41
-
- <td>
- <p>ed
-
- <td>
- <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>
- <p align="left" style="margin-top: 0.04in">Add
- ”.”
-
- <td>
- <p>
-
- Agree. Forward to project editor.<tr valign="top">
- <td>
- <p>US 70
-
- <td>
- <p>20.5 [meta]<td>
- <p>
-
- <td>
- <p>te
-
- <td>
- <p>Specifications now expressed via narrative text are more
- accurately and clearly expressed via executable code.
-
- <td>
- <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.
+<td>20.6.12 [func.bind.<br>
+bind]<td>
- <p>
+<td>te
- <td>
- <p>
+<td>
+bind should support move-only functors and bound arguments.
+
+<td> <td>We look forward to a paper on this topic. We recommend
+no action until a paper is available. We do think that bind would
+require further overloads to support move semantics, if indeed move
+semantics are possible.<p>Peter Dimov comments: I believe
+that what is meant here is that the CopyConstructible requirements on F
+and BoundArgs must be changed to MoveConstructible. I see no need for a
+paper.</tr>
+
- (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>
- <p>US 71
-
- <td>
- <p>20.6.7 [meta.<br>
- trans.<br>
- other]<td>
- <p>Table 51, last row, column 3
-
- <td>
- <p>ed
-
- <td>
- <p>The grammar is incorrect.
-
- <td>
- <p>Change “conversion are” to “conversion
- is”.
-
- <td>
- <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>
- <td>
- <p>DE-20
-
- <td>
- <p>20.6.12 [bind]
-
- <td>
- <p>
-
- <td>
- <p>ed
-
- <td>
- <p>DE-20 The section heading and the first sentence use the term
- "template function", which is undefined.
-
- <td>
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">Replace "template function"
- by "function template".
-
- <p>
-
- <td>
- <p>
-
- Agree. Forward to the project editor.</tr>
- <tr>
- <td valign="top">
- <p align="left"><a name="US72">US 72</a>
-
- <td valign="top">
- <p align="left">20.6.12 [func.bind.<br>
- bind]<td valign="top">
- <p align="left"><br>
-
- <td valign="top">
- <p align="left">te
-
- <td valign="top">
- <p align="left">
- bind should support move-only functors and bound arguments.
-
- <td valign="top">
- <p align="left"> <td valign="top">
- <p align="left">We look forward to a paper on this topic. We recommend
- no action until a paper is available. We do think that bind would
- require further overloads to support move semantics, if indeed move
- semantics are possible.<p align="left">Peter Dimov comments: I believe
- that what is meant here is that the CopyConstructible requirements on F
- and BoundArgs must be changed to MoveConstructible. I see no need for a
- paper.</tr>
- <tr>
- <td valign="top">
- <p>JP 38
-
- <td valign="top">
- <p align="left">20.6.12.<br>
- 1.3 [func.<br>
- bind.<br>
- bind]<td valign="top">
- <p align="left"><br>
-
- <td valign="top">
- <p>te
-
- <td valign="top">
- <p align="left" style=
- "margin-left: 0.19in; text-indent: -0.19in; margin-bottom: 0in">
- add the move requirement for bind's return type.<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 valign="top">
- <p align="left">Add
- the following requirements.<br>
- "<font color="#000000">it has a public move constructor
- that performs a member-wise move."</font>
+<tr valign="top">
+<td>JP38
- <p align="left" style="margin-top: 0.04in">Add
- the MoveConstructible.
+<td>20.6.12.<br>
+1.3 [func.<br>
+bind.<br>
+bind]<td>
+
+<td>te
+
+<td>
+add the move requirement for bind's return type.<p>
+For example, assume following th1 and th2,
+
+<p>
+<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>Add
+the requirement of move to get rid of this useless copy.
+
+<p>And also, add
+the MoveConstructible as well as CopyConstructible.
+
+<p>
+<br>
+
+<td>Add
+the following requirements.<br>
+"<font color="#000000">it has a public move constructor
+that performs a member-wise move."</font>
- <td valign="top">
- <p>
+<p>Add
+the MoveConstructible.
- We were not clear about what the submitter really intended. Requiring that
+<td>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>
- <p>
+<p>
Peter Dimov comments: I believe that if US 72 is
resolved as proposed by me above, the objects returned by bind will already
be required to have a move constructor, otherwise bind would be unable to
return them when F or a type in BoundArgs is move-only.</tr>
- <tr>
- <td valign="top">
- <p>DE-21
-
- <td valign="top">
- <p>20.6.12.<br>
- 1.3 [func.bind.<br>
- bind]<td valign="top">
- <p>
-
- <td valign="top">
- <p>te
-
- <td valign="top">
- <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 valign="top">
- <p>Add the missing specification in the same section, or add a
- cross-reference indicating the section where the specification appears.
-
- <td valign="top">
- <p align="left">Agree. There are several differences (omissions) between
- N2691 [func.bind.bind] and N2800 [func.bind.bind]. Ask the project
- editor to review the changes.<br>
+
+
+<tr valign="top">
+<td>DE21
+
+<td>20.6.12.<br>
+1.3 [func.bind.<br>
+bind]<td>
+
+<td>te
+
+<td>DE21 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>Add the missing specification in the same section, or add a
+cross-reference indicating the section where the specification appears.
+
+<td>Agree. There are several differences (omissions) between
+N2691 [func.bind.bind] and N2800 [func.bind.bind]. Ask the project
+editor to review the changes.<br>
</tr>
- <tr>
- <td valign="top">
- <p>UK<br>
- 211
-
- <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">
- <p align="justify">Te
-
- <td valign="top">
- <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 valign="top">
- <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.
+
+
+<tr valign="top">
+<td>UK211
- <td valign="top">
- <p align="left">Agree.<br>
+<td>20.6.12.<br>
+2.3 [unique.<br>
+ptr.<br>
+single.<br>
+asgn]<td>11
+
+<td>Te
+
+<td>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.
+
+<td>Change signature here and in the synopsis to: unique_ptr&
+operator=(nullptr_t); Strike the sentance an note before the Effects
+clause.
+
+<td>Agree.<br>
</tr>
- <tr>
- <td valign="top">
- <p>UK<br>
- 212
-
- <td valign="top">
- <p align="justify">20.6.13.7 [util.<br>
- dynamic.<br>
- safety]<td valign="top">
- <p align="justify"><br>
-
- <td valign="top">
- <p align="justify">Te
-
- <td valign="top">
- <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 valign="top">
- <p align="left">Move this specification to 18.5. Move the declarations
- into the header <new>.
-
- <td valign="top">
- <p align="left">Agree in principle, but not with the proposed
- resolution. We believe it belongs either a subsection of either 20
- [utilities] or 20.7 [memory] as part of the general reorganization of
- 20. The declaration should stay in
- <memory>. </memory>
- <br>
+
+
+<tr valign="top">
+<td>UK212
+
+<td>20.6.13.7 [util.<br>
+dynamic.<br>
+safety]<td>
+
+<td>Te
+
+<td>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.
+
+<td>Move this specification to 18.5. Move the declarations
+into the header <new>.
+
+<td>Agree in principle, but not with the proposed
+resolution. We believe it belongs either a subsection of either 20
+[utilities] or 20.7 [memory] as part of the general reorganization of
+20. The declaration should stay in
+<memory>. </memory>
+<br>
</tr>
- <tr>
- <td valign="top">
- <p>DE-22
-
- <td valign="top">
- <p>20.6.16.2 [func.<br>
- wrap.<br>
- func]<td valign="top">
- <p>
-
- <td valign="top">
- <p>te
-
- <td valign="top">
- <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 valign="top">
- <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 valign="top">
- <p align="left">Agree. std::reference_wrapper has the same structure,
- and we suggest that std::function be presented in the same way as
- std::reference_wrapper.<br>
+
+
+<tr valign="top">
+<td>DE22
+
+<td>20.6.16.2 [func.<br>
+wrap.<br>
+func]<td>
+
+<td>te
+
+<td>DE22 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>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>Agree. std::reference_wrapper has the same structure,
+and we suggest that std::function be presented in the same way as
+std::reference_wrapper.<br>
</tr>
- <tr>
- <td valign="top">
- <p align="left">US 73
-
- <td valign="top">
- <p align="left">20.6.18<br>
- [expr.prim.<br>
- lambda], [func.<br>
- reference<br>
- closure]
-
- <td valign="top">
- <p align="left"><br>
-
- <td valign="top">
- <p align="left">te
-
- <td valign="top">
- <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 valign="top">
- <p align="left">Remove 20.7.18 [func.referenceclosure].
+
- <p align="left"><br>
+<tr valign="top">
+<td>US73
- <p align="left">Remove 5.1.1 paragraph 12.
+<td>20.6.18<br>
+[expr.prim.<br>
+lambda], [func.<br>
+reference<br>
+closure]
- <td valign="top">
- <p align="left">This requires attention from CWG and/or EWG.<br>
+<td>
+
+<td>te
+
+<td>The std::reference_closure template is redundant with
+std::function and should be removed.
+
+<p><br>
+
+<p>
+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>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>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 style="margin-left: 0.25in"><br>
+
+<td>Remove 20.7.18 [func.referenceclosure].
+
+<p><br>
+
+<p>Remove 5.1.1 paragraph 12.
+
+<td>This requires attention from CWG and/or EWG.<br>
</tr>
- <tr valign="top">
- <td>
- <p>JP 39
+
- <td>
- <p align="left">20.6.16.2 [func.<br>
- wrap.func]<td>
- <p align="left"><br>
+<tr valign="top">
+<td>JP39
- <td>
- <p>te
+<td>20.6.16.2 [func.<br>
+wrap.func]<td>
- <td>
- <p align="left" style="margin-top: 0.04in">
- There are no requires corresponding to F of std::function.
+<td>te
- <td>
- <p align="left">
- Correct as follows.
+<td>
+There are no requires corresponding to F of std::function.
- <p align="left">
- template<class F, Allocator A>
- function(allocator_arg_t, const A&, F);
+<td>
+Correct as follows.
- <p align="left">
- template<class F, Allocator A>
- function(allocator_arg_t, const A&, F&&);
+<p>
+template<class F, Allocator A>
+function(allocator_arg_t, const A&, F);
- <p align="left">
- <br>
+<p>
+template<class F, Allocator A>
+function(allocator_arg_t, const A&, F&&);
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
+<p>
+<br>
- <p align="left">
- <br>
+<p style=
+"text-indent: 0.06in; margin-bottom: 0in">should be
- <p align="left">
- template<class F, Allocator A>
+<p>
+<br>
- <p align="left">
- requires CopyConstructible<F> &&
- Callable<F, ArgTypes...>
+<p>
+template<class F, Allocator A>
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
+<p>
+requires CopyConstructible<F> &&
+Callable<F, ArgTypes...>
- <p align="left">
- function(allocator_arg_t, const A&, F);
+<p>
+&& Convertible<Callable<F,
+ArgTypes...>::result_type, R>
- <p align="left">
- template<class F, Allocator A>
+<p>
+function(allocator_arg_t, const A&, F);
- <p align="left">
- requires CopyConstructible<F> &&
- Callable<F, ArgTypes...>
+<p>
+template<class F, Allocator A>
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
+<p>
+requires CopyConstructible<F> &&
+Callable<F, ArgTypes...>
- <p align="left">
- function(allocator_arg_t, const A&, F&&);
+<p>
+&& Convertible<Callable<F,
+ArgTypes...>::result_type, R>
- <p align="left"><br>
+<p>
+function(allocator_arg_t, const A&, F&&);
- <td>
- Agree with one correction: CopyConstructible should be
- ConstructibleWithAllocator. New proposed resolution:
- <p>Correct as follows. </p>
- <pre> template<class F, Allocator A>
+<td>Agree with one correction: CopyConstructible should be
+ConstructibleWithAllocator. New proposed resolution:
+<p>Correct as follows. </p>
+<pre> template<class F, Allocator A>
function(allocator_arg_t, const A&, F);
template<class F, Allocator A>
function(allocator_arg_t, const A&, F&&);
</pre>
- <p>should be </p>
- <pre> template<class F, Allocator A>
+<p>should be </p>
+<pre> template<class F, Allocator A>
requires ConstructibleWithAllocator<F, A>
&& Callable<F, ArgTypes...>
&& Convertible<Callable<F, ArgTypes...>
- ::result_type, R>
+ ::result_type, R>
function(allocator_arg_t, const A&, F);
template<class F, Allocator A>
requires ConstructibleWithAllocator<F,A>
&& Callable<F, ArgTypes...>
&& Convertible<Callable<F, ArgTypes...>
- ::result_type, R>
+ ::result_type, R>
function(allocator_arg_t,
- const A&, F&&);
+ const A&, F&&);
</pre>
- <tr valign="top">
- <td>
- <p>JP 40
+
- <td>
- <p align="left">20.6.16.2
+<tr valign="top">
+<td>JP40
- <td>
- <p align="left"><br>
+<td>20.6.16.2
- <td>
- <p>ed
+<td>
- <td>
- <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>ed
- <td>
- <p align="left">
- Correct as follows.
+<td>
+Thougn it's "Allocator Aloc" at other places, it's
+"Allocator A" only std::function constructor template
+parameter.
- <p align="left">
- template<class F, Allocator A>
- function(allocator_arg_t, const A&, F);
+<td>
+Correct as follows.
- <p align="left">
- template<class F, Allocator A>
- function(allocator_arg_t, const A&, F&&);
+<p>
+template<class F, Allocator A>
+function(allocator_arg_t, const A&, F);
- <p align="left">
- <br>
+<p>
+template<class F, Allocator A>
+function(allocator_arg_t, const A&, F&&);
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
+<p>
+<br>
- <p align="left">
- <br>
+<p style=
+"text-indent: 0.06in; margin-bottom: 0in">should be
- <p align="left">
- template<class F, Allocator <u>Alloc</u>>
- function(allocator_arg_t, const <u>Alloc</u> &, F);
+<p>
+<br>
- <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>
+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>
+<p>
+template<class F, Allocator <u>Alloc</u>>
+function(allocator_arg_t, const <u>Alloc</u> &,
+F&&);
- <td>
- <p>
+<p>
+<br>
- Agree, though minor. Forward to project editor (who may disregard).<tr valign="top">
- <td>
- <p><a name="JP41">JP 41</a>
+<td>Agree, though minor. Forward to project editor (who may disregard).
- <td>
- <p align="left">20.6.16.2
+<tr valign="top">
+<td><a name="JP41">JP41</a>
- <td>
- <p align="left"><br>
+<td>20.6.16.2
- <td>
- <p>te
+<td>
- <td>
- <p align="left" style="margin-top: 0.04in">
- There are no requires corresponding to R and Args of
- UsesAllocator.
+<td>te
- <td>
- <p align="left">
- Correct as follows.
+<td>
+There are no requires corresponding to R and Args of
+UsesAllocator.
- <p align="left">
- template <class R, class... Args>
+<td>
+Correct as follows.
- <p align="left">
- concept_map UsesAllocator<function<R(Args...)>,
- Alloc> {
+<p>
+template <class R, class... Args>
- <p align="left">
- typedef Alloc allocator_type;
+<p>
+concept_map UsesAllocator<function<R(Args...)>,
+Alloc> {
- <p align="left">}
+<p>
+typedef Alloc allocator_type;
- <p align="left">
- <br>
+<p>}
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
+<p>
+<br>
- <p align="left">
- <br>
+<p style=
+"text-indent: 0.06in; margin-bottom: 0in">should be
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... Args>
+<p>
+<br>
- <p align="left">
- concept_map UsesAllocator<function<R(Args...)>,
- Alloc> {
+<p>
+template <<u>Returnable</u> R,
+<u>CopyConstructible</u>... Args>
- <p align="left">
- typedef Alloc allocator_type;
+<p>
+concept_map UsesAllocator<function<R(Args...)>,
+Alloc> {
- <p align="left" style="margin-top: 0.04in">}
+<p>
+typedef Alloc allocator_type;
- <td>
- <p>
+<p>}
- This change would be redundant because function<> is already sufficiently
- constrained. No actions necessary.<tr valign="top">
- <td>
- <p>JP 42
+<td>This change would be redundant because function<> is already sufficiently
+ constrained. No actions necessary.
- <td>
- <p align="left">20.6.16.2
+<tr valign="top">
+<td>JP42
- <td>
- <p align="left"><br>
+<td>20.6.16.2
- <td>
- <p>ed
+<td>
- <td>
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">The requires
- are wrong.
+<td>ed
- <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>The requires
+are wrong.
- <td>
- <p align="left">
- Correct as follows.
+<p>R
+require Returnable, and ArgTypes requires CopyConstructible
+by a definition of function, then it's a mistake to
+designate followings by MoveConstructible.
- <p align="left">
- <br>
+<td>
+Correct as follows.
- <p align="left">
- template <MoveConstructible R, MoveConstructible...
- ArgTypes>
+<p>
+<br>
- <p align="left">
- bool operator==(const function<R(ArgTypes...)>&,
- nullptr_t);
+<p>
+template <MoveConstructible R, MoveConstructible...
+ArgTypes>
- <p align="left">
- template <MoveConstructible R, MoveConstructible...
- ArgTypes>
+<p>
+bool operator==(const function<R(ArgTypes...)>&,
+nullptr_t);
- <p align="left">
- bool operator==(nullptr_t, const
- function<R(ArgTypes...)>&);
+<p>
+template <MoveConstructible R, MoveConstructible...
+ArgTypes>
- <p align="left">
- template <MoveConstructible R, MoveConstructible...
- ArgTypes>
+<p>
+bool operator==(nullptr_t, const
+function<R(ArgTypes...)>&);
- <p align="left">
- bool operator!=(const function<R(ArgTypes...)>&,
- nullptr_t);
+<p>
+template <MoveConstructible R, MoveConstructible...
+ArgTypes>
- <p align="left">
- template <MoveConstructible R, MoveConstructible...
- ArgTypes>
+<p>
+bool operator!=(const function<R(ArgTypes...)>&,
+nullptr_t);
- <p align="left">
- bool operator!=(nullptr_t, const
- function<R(ArgTypes...)>&);
+<p>
+template <MoveConstructible R, MoveConstructible...
+ArgTypes>
- <p align="left">
- template <MoveConstructible R, MoveConstructible...
- ArgTypes>
+<p>
+bool operator!=(nullptr_t, const
+function<R(ArgTypes...)>&);
- <p align="left">
- void swap(function<R(ArgTypes...)>&,
- function<R(ArgTypes...)>&);
+<p>
+template <MoveConstructible R, MoveConstructible...
+ArgTypes>
- <p align="left">
- <br>
+<p>
+void swap(function<R(ArgTypes...)>&,
+function<R(ArgTypes...)>&);
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
+<p>
+<br>
- <p align="left">
- <br>
+<p style=
+"text-indent: 0.06in; margin-bottom: 0in">should be
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... ArgTypes>
+<p>
+<br>
- <p align="left">
- bool operator==(const function<R(ArgTypes...)>&,
- nullptr_t);
+<p>
+template <<u>Returnable</u> R,
+<u>CopyConstructible</u>... ArgTypes>
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... ArgTypes>
+<p>
+bool operator==(const function<R(ArgTypes...)>&,
+nullptr_t);
- <p align="left">
- bool operator==(nullptr_t, const
- function<R(ArgTypes...)>&);
+<p>
+template <<u>Returnable</u> R,
+<u>CopyConstructible</u>... ArgTypes>
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... ArgTypes>
+<p>
+bool operator==(nullptr_t, const
+function<R(ArgTypes...)>&);
- <p align="left">
- bool operator!=(const function<R(ArgTypes...)>&,
- nullptr_t);
+<p>
+template <<u>Returnable</u> R,
+<u>CopyConstructible</u>... ArgTypes>
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... ArgTypes>
+<p>
+bool operator!=(const function<R(ArgTypes...)>&,
+nullptr_t);
- <p align="left">
- bool operator!=(nullptr_t, const
- function<R(ArgTypes...)>&);
+<p>
+template <<u>Returnable</u> R,
+<u>CopyConstructible</u>... ArgTypes>
- <p align="left">
- template <<u>Returnable</u> R,
- <u>CopyConstructible</u>... ArgTypes>
+<p>
+bool operator!=(nullptr_t, const
+function<R(ArgTypes...)>&);
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">void
- swap(function<R(ArgTypes...)>&,
- function<R(ArgTypes...)>&);
+<p>
+template <<u>Returnable</u> R,
+<u>CopyConstructible</u>... ArgTypes>
- <p align="left" style="margin-top: 0.04in">
- <br>
+<p>void
+swap(function<R(ArgTypes...)>&,
+function<R(ArgTypes...)>&);
- <td>
- <p>
+<p>
+<br>
- As with JP 41, these constraints are redundant given that function<> is
+<td>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>
- <p>UK<br>
- 208
-
- <td>
- <p align="justify">20.6.17
+ to "class". Note: this issue is also present in func.wrap.func.nullptr.
- <td>
- <p align="justify">1
+<tr valign="top">
+<td>UK208
- <td>
- <p align="justify">Te
+<td>20.6.17
- <td>
- <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. <br>
+<td>1
- <td>
- <p align="left">.
+<td>Te
- <td>
- <p>
+<td>std::hash should
+be implemented for much more of the standard library. In
+particular for pair, tuple and all the standard containers. <br>
- Consensus is that this is an expansion of the scope of C++0X and so we
- recommend no action.<tr valign="top">
- <td>
- <p>UK<br>
- 209
+<td>.
- <td>
- <p align="justify">20.7
+<td>Consensus is that this is an expansion of the scope of C++0X and so we
+ recommend no action.
- <td>
- <p align="justify"><br>
+<tr valign="top">
+<td>UK209
- <td>
- <p align="justify">Te
+<td>20.7
- <td>
- <p align="left">Smart pointers cannot be used in
- constrained templates
+<td>
- <td>
- <p align="left">Provide
- constraints for smart pointers
+<td>Te
- <p align="left"><br>
+<td>Smart pointers cannot be used in
+constrained templates
- <p align="left"><br>
+<td>Provide
+constraints for smart pointers
- <td>
- <p>
+<p><br>
- We look forward to a paper on this topic. We recommend no action until a
+<td>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.<p>
Peter Dimov comments: shared_ptr<T> and weak_ptr<T> support all types T for
which T* is valid. In other words, a possible (partial) resolution is to
change class T to PointeeType T for shared_ptr, weak_ptr and possibly
enable_shared_from_this.<br>
- <tr valign="top">
- <td>
- <p>UK<br>
- 213
-
- <td>
- <p align="justify">20.7.6
-
- <td>
- <p align="justify"><br>
-
- <td>
- <p align="justify">Te
-
- <td>
- <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. <br>
-
- <td>
- <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>
- <p>
-
- [default.allocator]
-
- Agree as stated. A future paper will address additional related issues.<tr valign="top">
- <td>
- <p>UK<br>
- 214
-
- <td>
- <p align="justify">20.7.8
-
- <td>
- <p align="justify"><br>
-
- <td>
- <p align="justify">Te
-
- <td>
- <p align="left">
- raw_storage_iterator needs constraining as an iterator
- adaptor to be safely used in constrained templates <br>
-
- <td>
- <p align="left">Constrain the raw_storage_iterator template
-
- <td>
- <p>
-
- We look forward to a paper on this topic. We recommend no action until a
- paper is available.<tr valign="top">
- <td>
- <p>UK<br>
- 210
-
- <td>
- <p align="justify">20.7.11
-
- <td>
- <p align="justify"><br>
-
- <td>
- <p align="justify">Te
-
- <td>
- <p align="left">Specialized algorithms for memory
- managenment need requirements to be easily usable in
- constrained templates
-
- <td>
- <p align="left">Provide
- constraints for all algorithms in 20.7.11
-
- <p align="left"><br>
-
- <p align="left"><br>
-
- <td>
- <p>
-
- We look forward to a paper on this topic. We recommend no action until a
- paper is available.<tr>
- <td>
- <p>JP 44
-
- <td>
- <p align="left">20.7.13.6 [util.<br>
- smartptr.<br>
- shared.<br>
- atomic]<td>
- <p align="left"><br>
-
- <td>
- <p>te
-
- <td>
- <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>
- <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>
- <p align="left">Agree. All of the
- functions need a requirement that p (or v) is a pointer to a valid
- object.<br>
+
+
+<tr valign="top">
+<td>UK213
+
+<td>20.7.6
+
+<td>
+
+<td>Te
+
+<td>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. <br>
+
+<td>The primary allocator template should be
+constrained to require ObjectType<T> and
+FreeStoreAllocatable<T>. Further operations to be
+constrained as required.
+
+<td>[default.allocator]
+
+ Agree as stated. A future paper will address additional related issues.
+
+<tr valign="top">
+<td>UK214
+
+<td>20.7.8
+
+<td>
+
+<td>Te
+
+<td>
+raw_storage_iterator needs constraining as an iterator
+adaptor to be safely used in constrained templates <br>
+
+<td>Constrain the raw_storage_iterator template
+
+<td>We look forward to a paper on this topic. We recommend no action until a
+ paper is available.
+
+<tr valign="top">
+<td>UK210
+
+<td>20.7.11
+
+<td>
+
+<td>Te
+
+<td>Specialized algorithms for memory
+managenment need requirements to be easily usable in
+constrained templates
+
+<td>Provide
+constraints for all algorithms in 20.7.11
+
+<p><br>
+
+<td>We look forward to a paper on this topic. We recommend no action until a
+ paper is available.
+
+<tr valign="top">
+<td>JP44
+
+<td>20.7.13.6 [util.<br>
+smartptr.<br>
+shared.<br>
+atomic]<td>
+
+<td>te
+
+<td>The
+1st parameter p and 2nd parameter v is now
+shared_ptr<T> *.
+
+<p>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>
+Change shared_ptr<T>& or add the "p shall not be
+a null pionter" at the requires.
+
+<td>Agree. All of the
+functions need a requirement that p (or v) is a pointer to a valid
+object.<br>
</tr>
- <tr valign="top">
- <td>
- <p align="left">US 74.1
-
- <td>
- <p align="left">20.8
-
- <td>
- <p align="left"><br>
-
- <td>
- <p align="left">te
-
- <td>
- <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. <br>
-
- <td>
- <p align="left">Remove support
- for scoped allocators from the working paper. This includes
- at least the following changes: <br>
-
- <p align="left">Remove 20.8.3
- [allocator.element.concepts] <br>
-
- <p align="left">Remove 20.8.7
- [allocator.adaptor] <br>
-
- <p align="left">Remove 20.8.10
- [construct.element] <br>
-
- <p align="left">In Clause 23:
- replace requirements naming the AllocatableElement concept
- with requirements naming CopyConstructible,
- MoveConstructible, DefaultConstructible, or Constructible,
- as appropriate.<br>
-
- <td>
- <p align="left">Resolved by
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2840.pdf">
- N2840</a>, accepted in New Jersey.<p align="left">See <a href="#US65">US
- 65</a> for detailed notes.<br>
-
- <tr>
- <td>
- <p>US 80
-
- <td>
- <p>20.8.2.1 [time.traits.<br>
- is_fp]<td>
- <p>Heading
-
- <td>
- <p>ed
-
- <td>
- <p>The section heading does not describe the contents.
-
- <td>
- <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.
+
+
+<tr valign="top">
+<td>US74.1
+
+<td>20.8
+
+<td>
- <p>
+<td>te
- <td>
- <p>
+<td>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>Some evidence of
+the complexity introduced by scoped allocators:
+
+<p>20.3.3, 20.5:
+large increase in the number of pair and tuple constructors
+
+<p>23: confusing
+“AllocatableElement” requirements throughout. <br>
+
+<td>Remove support
+for scoped allocators from the working paper. This includes
+at least the following changes: <br>
+
+<p>Remove 20.8.3
+[allocator.element.concepts] <br>
+
+<p>Remove 20.8.7
+[allocator.adaptor] <br>
+
+<p>Remove 20.8.10
+[construct.element] <br>
+
+<p>In Clause 23:
+replace requirements naming the AllocatableElement concept
+with requirements naming CopyConstructible,
+MoveConstructible, DefaultConstructible, or Constructible,
+as appropriate.<br>
+
+<td>Resolved by
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2840.pdf">
+N2840</a>, accepted in New Jersey.<p>See <a href="#US65">US
+65</a> for detailed notes.<br>
- Agree. The section name and the section label
+
+
+<tr valign="top">
+<td>US80
+
+<td>20.8.2.1 [time.traits.<br>
+is_fp]<td>Heading
+
+<td>ed
+
+<td>The section heading does not describe the contents.
+
+<td>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>Agree. The section name and the section label
([time.traits.is_fp]) are wrong. Forward to project editor.</tr>
- <tr valign="top">
- <td>
- <p>US 74.2
+
+
+<tr valign="top">
+<td>US74.2
- <td>
- <p>20.8.2.2 [allocator.<br>
- concepts]<td>
- <p>(a) syn-opsis (b) after ¶ 14
+<td>20.8.2.2 [allocator.<br>
+concepts]<td>(a) syn-opsis (b) after ¶ 14
- <td>
- <p>te/ed
+<td>te/ed
- <td>
- <p>A concept name is twice misspelled.
+<td>A concept name is twice misspelled.
- <td>
- <p>Change “Hasconstructor” to
- “HasConstructor” (twice).
+<td>Change “Hasconstructor” to
+“HasConstructor” (twice).
- <td>
- <p>
+<td>Agree. Forward to project editor.
- Agree. Forward to project editor.<tr valign="top">
- <td>
- <p>US 75
+<tr valign="top">
+<td>US75
- <td>
- <p>20.8.2.2
+<td>20.8.2.2
- <td>
- <p>
+<td>
- <td>
- <p>te
+<td>te
- <td>
- <p>Allocator concepts are incomplete
+<td>Allocator concepts are incomplete
- <td>
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">See paper:
- http://www.halpernwightsoftware.com/<br>
+<td>See paper:
+http://www.halpernwightsoftware.com/<br>
WG21/n2810_allocator_defects.pdf
- <p>
+<p>
- <td>
- <p>
+<td>
- <p>
+<p>
- <p>
+<p>
- <p>
+<p>
The referenced paper, N2810, was revised into
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2840.pdf">
@@ -5061,8164 +3996,6714 @@
consider at next meeting (con): 7 pro - 1 con - many abstain, consensus for
moving as formal motion at this meeting. Also had strong support for
proposals 1, 2 and 3 in N2834 (simplify pair). Pablo will submit a paper
- containing only those parts of N2834 in Frankfurt.<tr valign="top">
- <td>
- <p>JP 43
+ containing only those parts of N2834 in Frankfurt.
+
+<tr valign="top">
+<td>JP43
- <td>
- <p align="left">20.8.3
+<td>20.8.3
[allocator.<br>
- element.<br>
- concepts]<td>
- <p align="left"><br>
+element.<br>
+concepts]<td>
- <td>
- <p>ed
+<td>ed
- <td>
- <p align="left">
- Typo.
+<td>
+Typo.
- <p align="left" style="margin-top: 0.04in">
- "alloc" should be "Alloc"
+<p>
+"alloc" should be "Alloc"
- <td>
- <p align="left">
- Correct as follows.
- <br>
+<td>
+Correct as follows.
+<br>
- <p align="left">
- auto concept UsesAllocator<typename T, typename
- Alloc> {
+<p>
+auto concept UsesAllocator<typename T, typename
+Alloc> {
- <p align="left">
- requires Allocator<alloc>;
+<p>
+requires Allocator<alloc>;
- <p align="left">
- typename allocator_type = T::allocator_type;
+<p>
+typename allocator_type = T::allocator_type;
- <p align="left">
-
+<p>
+
- <p align="left">
- should be
+<p>
+should be
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">
+<p>
- <p align="left">
- auto concept UsesAllocator<typename T, typename
- Alloc> {
+<p>
+auto concept UsesAllocator<typename T, typename
+Alloc> {
- <p align="left">
- requires Allocator<<u>Alloc</u>>;
+<p>
+requires Allocator<<u>Alloc</u>>;
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">typename
- allocator_type = T::allocator_type;
- <br>
+<p>typename
+allocator_type = T::allocator_type;
+<br>
- <td>
- <p>
+<td>Agree. Forward to project editor.
- Agree. Forward to project editor.<tr valign="top">
- <td>
- <p>UK<br>
- 215
+<tr valign="top">
+<td>UK215
- <td>
- <p align="justify">20.8.3.3
+<td>20.8.3.3
[time.<br>
- duration.<br>
- arithmetic]
-
- <td>
- <p align="justify">6,8
+duration.<br>
+arithmetic]
- <td>
- <p align="justify">Ed
+<td>6,8
- <td>
- <p align="left">Extra pair of
- {}, presumably some formatting code gone awry :
- duration& operator-{-}();
+<td>Ed
- <p align="left"><br>
+<td>Extra pair of
+{}, presumably some formatting code gone awry :
+duration& operator-{-}();
- <td>
- <p align="left">Remove the {} or fix formatting
+<td>Remove the {} or fix formatting
- <td>
- <p>
+<td>Agree. Forward to project editor.
- Agree. Forward to project editor.<tr valign="top">
- <td>
- <p align="left">US 77
+<tr valign="top">
+<td>US77
- <td>
- <p align="left">20.8.4
+<td>20.8.4
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p align="left">te
+<td>te
- <td>
- <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.
+<td>
+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. <br>
+<p>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. <br>
- <td>
- <p align="left">Remove 20.8.4.
+<td>Remove 20.8.4.
- <p align="left"><br>
+<p><br>
- <p align="left">Remove 20.8.5.
+<p>Remove 20.8.5.
- <p align="left"><br>
+<p><br>
- <p align="left">Remove all references to the facilities in
- 20.8.4 and 20.8.5 from clause 23.
+<p>Remove all references to the facilities in
+20.8.4 and 20.8.5 from clause 23.
- <td>
- <p align="left"><br>
+<td>
- <tr valign="top">
- <td>
- <p align="left">US 78
+<tr valign="top">
+<td>US78
- <td>
- <p align="left">20.8.12,<br>
- 20.8.13.2 [unique.<br>
- ptr], [util.<br>
- smartptr.<br>
- shared]<td>
- <p align="left"><br>
+<td>20.8.12,<br>
+20.8.13.2 [unique.<br>
+ptr], [util.<br>
+smartptr.<br>
+shared]<td>
- <td>
- <p align="left">te
+<td>te
- <td>
- <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>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>
- <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>
+<td>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>We look forward to
+a paper on this topic. We recommend no action until a paper is
+available. We believe that the shared pointer must use the default deleter for the conversion to succeed.<p>
+Peter Dimov comments: this is basically a request for shared_ptr<>::release
+in disguise, with all the associated problems. Not a good idea.<br>
- <td>
- <p align="left">We look forward to
- a paper on this topic. We recommend no action until a paper is
- available. We believe that the shared pointer must use the default deleter for the conversion to succeed.<p align="left">
- Peter Dimov comments: this is basically a request for shared_ptr<>::release
- in disguise, with all the associated problems. Not a good idea.<br>
+
- <tr valign="top">
- <td>
- <p align="left">US 79
+<tr valign="top">
+<td>US79
- <td>
- <p align="left">20.8.12.2.1 [unique.ptr.<br>
- single.ctor]<td>
- <p align="left"><br>
+<td>20.8.12.2.1 [unique.ptr.<br>
+single.ctor]<td>
- <td>
- <p align="left">te
+<td>te
- <td>
- <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:
+<td>
+[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>
+<br>
- <p align="left">
- unique_ptr<int, void(*)(void*)>
- p(malloc(sizeof(int))); // should not compile
+<p>
+unique_ptr<int, void(*)(void*)>
+p(malloc(sizeof(int))); // should not compile
- <p align="left">
- <br>
+<p>
+<br>
- <p align="left">
- unique_ptr<int, void(*)(void*)>
- p(malloc(sizeof(int)), free); // ok <br>
+<p>
+unique_ptr<int, void(*)(void*)>
+p(malloc(sizeof(int)), free); // ok <br>
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p align="left">Agree. The unique_ptr(pointer
- p) <em>Requires</em> clause should be the same as the unique_ptr() <em>
- Requires</em> clause. Note that unique_ptr [unique.ptr] needs concepts.<br>
+<td>Agree. The unique_ptr(pointer
+p) <em>Requires</em> clause should be the same as the unique_ptr() <em>
+Requires</em> clause. Note that unique_ptr [unique.ptr] needs concepts.<br>
- <tr valign="top">
- <td>
- <p>JP 45
+
- <td>
- <p align="left">20.9 [time]<td>
- <p align="left"><br>
+<tr valign="top">
+<td>JP45
- <td>
- <p>te
+<td>20.9 [time]<td>
- <td>
- <p align="left">
- Rep, Period, Clock and Duration don't correspond to
- concept.
+<td>te
- <p align="left">
- template <class Rep, class Period = ratio<1>>
- class duration;
+<td>
+Rep, Period, Clock and Duration don't correspond to
+concept.
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">template
- <class Clock, class Duration = typename
- Clock::duration> class time_point;
+<p>
+template <class Rep, class Period = ratio<1>>
+class duration;
- <p align="left" style="margin-top: 0.04in">
- <br>
+<p>template
+<class Clock, class Duration = typename
+Clock::duration> class time_point;
- <td>
- <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.
+<p>
+<br>
- <td>
- <p align="left">We agree that this section needs concepts. We
- look forward to a paper on this topic. We recommend no action until a
- paper is available.<br>
+<td>
+Make concept for Rep, Period, Clock and Duration, and fix
+20.9 and wait_until and wait_for's template parameter at
+30.
- <tr valign="top">
- <td>
- <p align="left">US 81
+<td>We agree that this section needs concepts. We
+look forward to a paper on this topic. We recommend no action until a
+paper is available.<br>
- <td>
- <p align="left">20.9.3
+
- <td>
- <p align="left"><br>
+<tr valign="top">
+<td>US81
- <td>
- <p align="left">te
+<td>20.9.3
- <td>
- <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.
+<td>
- <p align="left">
- <br>
+<td>te
- <p align="left">Ex:
+<td>
+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>
+<br>
- <p align="left">
- milliseconds ms(...);
+<p>Ex:
- <p align="left">
- microseconds us(...);
+<p>
+<br>
- <p align="left">
- <br>
+<p>
+milliseconds ms(...);
- <p align="left">ms
- % us; // microseconds
+<p>
+microseconds us(...);
- <p align="left">us
- % ms; // microseconds
+<p>
+<br>
- <p align="left">ms
- % 5; // milliseconds
+<p>ms
+% us; // microseconds
- <p align="left">5 %
- ms; // does not compile
+<p>us
+% ms; // microseconds
- <p align="left"><br>
+<p>ms
+% 5; // milliseconds
- <td>
- <p align="left">Add:
+<p>5 %
+ms; // does not compile
- <p align="left"><br>
+<td>Add:
- <p align="left">
- template <class Rep, class Period = ratio<1>>
+<p><br>
- <p align="left">
- class duration {
+<p>
+template <class Rep, class Period = ratio<1>>
- <p align="left">
- public:
+<p>
+class duration {
- <p align="left">...
+<p>
+public:
- <p align="left">duration&
- operator%(const rep&);
+<p>...
- <p align="left">duration&
- operator%(const duration&);
+<p>duration&
+operator%(const rep&);
- <p align="left">..
+<p>duration&
+operator%(const duration&);
- <p align="left">};
+<p>..
- <p align="left"><br>
+<p>};
- <p align="left">template
- <class Rep1, class Period,
+<p><br>
- <p align="left">class Rep2>
+<p>template
+<class Rep1, class Period,
- <p align="left">
- duration<typename common_type<
+<p>class Rep2>
- <p align="left">Rep1,
- Rep2>::type, Period>
+<p>
+duration<typename common_type<
- <p align="left">operator%(const
- duration<Rep1, Period>& d, const Rep2& s);
+<p>Rep1,
+Rep2>::type, Period>
- <p align="left"><br>
+<p>operator%(const
+duration<Rep1, Period>& d, const Rep2& s);
- <p align="left">template
- <class Rep1, class Period1,
+<p><br>
- <p align="left">class Rep2,
- class Period2>
+<p>template
+<class Rep1, class Period1,
- <p align="left">typename
- common_type<duration<Rep1, Period1>,
- duration<Rep2, Period2>>::type
+<p>class Rep2,
+class Period2>
- <p align="left">operator%(const
- duration<Rep1, Period1>& lhs, const
- duration<Rep2, Period2>& rhs);
+<p>typename
+common_type<duration<Rep1, Period1>,
+duration<Rep2, Period2>>::type
- <p align="left"><br>
+<p>operator%(const
+duration<Rep1, Period1>& lhs, const
+duration<Rep2, Period2>& rhs);
- <td>
- <p align="left">[time.duration] Agree except that there is a typo in the
- proposed resolution. The member operators should be operator%=. This is
- also LWG
- issue 934.<br>
+<td>[time.duration] Agree except that there is a typo in the
+proposed resolution. The member operators should be operator%=. This is
+also LWG
+issue 934.<br>
- <tr valign="top">
- <td>
- <p>US 82
+
- <td>
- <p>20.9.5.3
+<tr valign="top">
+<td>US82
- <td>
- <p>after ¶ 1
+<td>20.9.5.3
- <td>
- <p>ed
+<td>after ¶ 1
- <td>
- <p>The code synopsis has a minor alignment error.
+<td>ed
- <td>
- <p>Align “rep” with the other symbols defined
- in this synopsis.
+<td>The code synopsis has a minor alignment error.
- <td>
- <p>
+<td>Align “rep” with the other symbols defined
+in this synopsis.
- [time.clock.hires] Agree. Forward to project editor.<tr valign="top">
- <td>
- <p><a name="UK216">UK<br>
- 216</a>
+<td>[time.clock.hires] Agree. Forward to project editor.
- <td>
- <p align="justify">21
+<tr valign="top">
+<td><a name="UK216">UK216</a>
- <td>
- <p align="justify"><br>
+<td>21
- <td>
- <p align="justify">Te
+<td>
- <td>
- <p align="left">All the containers use concepts for their
- iterator usage, exect for basic_string. This needs fixing.
+<td>Te
- <td>
- <p align="left">Use concepts for iterator template
- parameters throughout the chapter.
+<td>All the containers use concepts for their
+iterator usage, exect for basic_string. This needs fixing.
- <td>
- <p>
+<td>Use concepts for iterator template
+parameters throughout the chapter.
- NB comments to be handled by Dave Abrahams and Howard Hinnant with advice
+<td>NB comments to be handled by Dave Abrahams and Howard Hinnant with advice
from PJP: UK216 (which duplicates) JP46, JP48.
<a href="#JP46">JP46</a> supplies extensive
- proposed wording; start there.<tr valign="top">
- <td>
- <p><a name="JP46">JP 46 </a>
+ proposed wording; start there.
- <td>
- <p align="left">21.2, 21.3
+<tr valign="top">
+<td><a name="JP46">JP46 </a>
- <td>
- <p align="left"><br>
+<td>21.2, 21.3
- <td>
- <p>te
+<td>
- <td>
- <p align="left" style="margin-top: 0.04in">The
- basic_string does not use concept.
+<td>te
- <td>
- <p align="left">The
- "class Alloc" is changed to "Allocator Alloc".
+<td>The
+basic_string does not use concept.
- <p align="left">The
- "class InputIterator" is changed to "InputIterator Iter".
+<td>The
+"class Alloc" is changed to "Allocator Alloc".
- <p align="left">
- <br>
+<p>The
+"class InputIterator" is changed to "InputIterator Iter".
- <p align="left">//
- 21.3, basic_string:
+<p>
+<br>
- <p align="left">
- template<class charT, class traits =
- char_traits<charT>,
+<p>//
+21.3, basic_string:
- <p align="left">
- <u>Allocator</u> Alloc = allocator<charT> >
+<p>
+template<class charT, class traits =
+char_traits<charT>,
- <p align="left">
- class basic_string;
+<p>
+<u>Allocator</u> Alloc = allocator<charT> >
- <p align="left">
-
+<p>
+class basic_string;
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+basic_string<charT,traits,<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+operator+(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(basic_string<charT,traits,<u>Alloc</u>>&&
- lhs,
+<p>
+basic_string<charT,traits,<u>Alloc</u>>&&
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+operator+(basic_string<charT,traits,<u>Alloc</u>>&&
+lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+basic_string<charT,traits,<u>Alloc</u>>&&
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
- rhs);
+<p>
+operator+(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+basic_string<charT,traits,<u>Alloc</u>>&&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(basic_string<charT,traits,<u>Alloc</u>>&&
- lhs,
+<p>
+basic_string<charT,traits,<u>Alloc</u>>&&
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
- rhs);
+<p>
+operator+(basic_string<charT,traits,<u>Alloc</u>>&&
+lhs,
- <p align="left">
-
+<p>
+basic_string<charT,traits,<u>Alloc</u>>&&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(const charT* lhs,
+<p>
+basic_string<charT,traits,<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+operator+(const charT* lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(const charT* lhs,
+<p>
+basic_string<charT,traits,<u>Alloc</u>>&&
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
- rhs);
+<p>
+operator+(const charT* lhs,
- <p align="left">
-
+<p>
+basic_string<charT,traits,<u>Alloc</u>>&&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(charT lhs, const
- basic_string<charT,traits,<u>Alloc</u>>& rhs);
+<p>
+basic_string<charT,traits,<u>Alloc</u>>
- <p align="left">
-
+<p>
+operator+(charT lhs, const
+basic_string<charT,traits,<u>Alloc</u>>& rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(charT lhs,
- basic_string<charT,traits,<u>Alloc</u>>&&
- rhs);
+<p>
+basic_string<charT,traits,<u>Alloc</u>>&&
- <p align="left">
-
+<p>
+operator+(charT lhs,
+basic_string<charT,traits,<u>Alloc</u>>&&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+basic_string<charT,traits,<u>Alloc</u>>
- <p align="left">
- const charT* rhs);
+<p>
+operator+(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const charT* rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(basic_string<charT,traits,<u>Alloc</u>>&&
- lhs,
+<p>
+basic_string<charT,traits,<u>Alloc</u>>&&
- <p align="left">
- const charT* rhs);
+<p>
+operator+(basic_string<charT,traits,<u>Alloc</u>>&&
+lhs,
- <p align="left">
-
+<p>
+const charT* rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
- charT rhs);
+<p>
+basic_string<charT,traits,<u>Alloc</u>>
- <p align="left">
-
+<p>
+operator+(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
+charT rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>&&
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator+(basic_string<charT,traits,<u>Alloc</u>>&&
- lhs, charT rhs);
+<p>
+basic_string<charT,traits,<u>Alloc</u>>&&
- <p align="left">
-
+<p>
+operator+(basic_string<charT,traits,<u>Alloc</u>>&&
+lhs, charT rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator==(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator==(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator==(const charT* lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator==(const charT* lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator==(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const charT* rhs);
+<p>
+bool operator==(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const charT* rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator!=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator!=(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator!=(const charT* lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator!=(const charT* lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator!=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const charT* rhs);
+<p>
+bool operator!=(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const charT* rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator< (const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator< (const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator< (const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const charT* rhs);
+<p>
+bool operator< (const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const charT* rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator< (const charT* lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator< (const charT* lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator> (const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator> (const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator> (const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const charT* rhs);
+<p>
+bool operator> (const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const charT* rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator> (const charT* lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator> (const charT* lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator<=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator<=(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator<=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const charT* rhs);
+<p>
+bool operator<=(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const charT* rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator<=(const charT* lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator<=(const charT* lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator>=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator>=(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator>=(const
- basic_string<charT,traits,<u>Alloc</u>>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const charT* rhs);
+<p>
+bool operator>=(const
+basic_string<charT,traits,<u>Alloc</u>>& lhs,
- <p align="left">
-
+<p>
+const charT* rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- bool operator>=(const charT* lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- rhs);
+<p>
+bool operator>=(const charT* lhs,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+rhs);
- <p align="left">//
- 21.3.8.8: swap
+<p>
+
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>//
+21.3.8.8: swap
- <p align="left">
- void swap(basic_string<charT,traits,Alloc>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- basic_string<charT,traits,Alloc>& rhs);
+<p>
+void swap(basic_string<charT,traits,Alloc>& lhs,
- <p align="left">
-
+<p>
+basic_string<charT,traits,Alloc>& rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- void swap(basic_string<charT,traits,Alloc>&&
- lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- basic_string<charT,traits,Alloc>& rhs);
+<p>
+void swap(basic_string<charT,traits,Alloc>&&
+lhs,
- <p align="left">
-
+<p>
+basic_string<charT,traits,Alloc>& rhs);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- void swap(basic_string<charT,traits,Alloc>& lhs,
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- basic_string<charT,traits,Alloc>&& rhs);
+<p>
+void swap(basic_string<charT,traits,Alloc>& lhs,
- <p align="left">
-
+<p>
+basic_string<charT,traits,Alloc>&& rhs);
- <p align="left">//
- 21.3.8.9: inserters and extractors
+<p>
+
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>//
+21.3.8.9: inserters and extractors
- <p align="left">
- basic_istream<charT,traits>&
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator>>(basic_istream<charT,traits>&&
- is,
+<p>
+basic_istream<charT,traits>&
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>& str);
+<p>
+operator>>(basic_istream<charT,traits>&&
+is,
- <p align="left">
-
+<p>
+basic_string<charT,traits,<u>Alloc</u>>& str);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_ostream<charT, traits>&
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- operator<<(basic_ostream<charT,
- traits>&& os,
+<p>
+basic_ostream<charT, traits>&
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- str);
+<p>
+operator<<(basic_ostream<charT,
+traits>&& os,
- <p align="left">
-
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+str);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_istream<charT,traits>&
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- getline(basic_istream<charT,traits>&& is,
+<p>
+basic_istream<charT,traits>&
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>& str,
+<p>
+getline(basic_istream<charT,traits>&& is,
- <p align="left">
- charT delim);
+<p>
+basic_string<charT,traits,<u>Alloc</u>>& str,
- <p align="left">
-
+<p>
+charT delim);
- <p align="left">
- template<class charT, class traits, <u>Allocator</u>
- <u>Alloc</u>>
+<p>
+
- <p align="left">
- basic_istream<charT,traits>&
+<p>
+template<class charT, class traits, <u>Allocator</u>
+<u>Alloc</u>>
- <p align="left">
- getline(basic_istream<charT,traits>&& is,
+<p>
+basic_istream<charT,traits>&
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>>& str);
+<p>
+getline(basic_istream<charT,traits>&& is,
- <p align="left">
-
+<p>
+basic_string<charT,traits,<u>Alloc</u>>& str);
- <p align="left">
- <br>
+<p>
+
- <p align="left">//
- 21.3 Class template basic_string
+<p>
+<br>
- <p align="left">
- namespace std {
+<p>//
+21.3 Class template basic_string
- <p align="left">
- template<class charT, class traits =
- char_traits<charT>,
+<p>
+namespace std {
- <p align="left">
- <u>Allocator Alloc</u> = allocator<charT> >
+<p>
+template<class charT, class traits =
+char_traits<charT>,
- <p align="left">
- class basic_string {
+<p>
+<u>Allocator Alloc</u> = allocator<charT> >
- <p align="left">
- public:
+<p>
+class basic_string {
- <p align="left">//
- types:
+<p>
+public:
- <p align="left">
- typedef traits traits_type;
+<p>//
+types:
- <p align="left">
- typedef typename traits::char_type value_type;
+<p>
+typedef traits traits_type;
- <p align="left">
- typedef <u>Alloc</u> allocator_type;
+<p>
+typedef typename traits::char_type value_type;
- <p align="left">
- typedef typename <u>Alloc</u>::size_type size_type;
+<p>
+typedef <u>Alloc</u> allocator_type;
- <p align="left">
- typedef typename <u>Alloc</u>::difference_type
- difference_type;
+<p>
+typedef typename <u>Alloc</u>::size_type size_type;
- <p align="left">
- typedef typename <u>Alloc</u>::reference reference;
+<p>
+typedef typename <u>Alloc</u>::difference_type
+difference_type;
- <p align="left">
- typedef typename <u>Alloc</u>::const_reference
- const_reference;
+<p>
+typedef typename <u>Alloc</u>::reference reference;
- <p align="left">
- typedef typename <u>Alloc</u>::pointer pointer;
+<p>
+typedef typename <u>Alloc</u>::const_reference
+const_reference;
- <p align="left">
- typedef typename <u>Alloc</u>::const_pointer const_pointer;
+<p>
+typedef typename <u>Alloc</u>::pointer pointer;
- <p align="left">
- typedef implementation-defined iterator; // See 23.1
+<p>
+typedef typename <u>Alloc</u>::const_pointer const_pointer;
- <p align="left">
- typedef implementation-defined const_iterator; // See 23.1
+<p>
+typedef implementation-defined iterator; // See 23.1
- <p align="left">
- typedef std::reverse_iterator<iterator>
- reverse_iterator;
+<p>
+typedef implementation-defined const_iterator; // See 23.1
- <p align="left">
- typedef std::reverse_iterator<const_iterator>
- const_reverse_iterator;
+<p>
+typedef std::reverse_iterator<iterator>
+reverse_iterator;
- <p align="left">
- static const size_type npos = -1;
+<p>
+typedef std::reverse_iterator<const_iterator>
+const_reverse_iterator;
- <p align="left">
-
+<p>
+static const size_type npos = -1;
- <p align="left">//
- 21.3.2 construct/copy/destroy:
+<p>
+
- <p align="left">
- explicit basic_string(const <u>Alloc</u>& a =
- <u>Alloc</u>());
+<p>//
+21.3.2 construct/copy/destroy:
- <p align="left">
- basic_string(const basic_string& str);
+<p>
+explicit basic_string(const <u>Alloc</u>& a =
+<u>Alloc</u>());
- <p align="left">
- basic_string(basic_string&& str);
+<p>
+basic_string(const basic_string& str);
- <p align="left">
- basic_string(const basic_string& str, size_type pos,
- size_type n = npos,
+<p>
+basic_string(basic_string&& str);
- <p align="left">
- const <u>Alloc</u>& a = <u>Alloc</u>());
+<p>
+basic_string(const basic_string& str, size_type pos,
+size_type n = npos,
- <p align="left">
- basic_string(const charT* s,
+<p>
+const <u>Alloc</u>& a = <u>Alloc</u>());
- <p align="left">
- size_type n, const <u>Alloc</u>& a = <u>Alloc</u>());
+<p>
+basic_string(const charT* s,
- <p align="left">
- basic_string(const charT* s, const <u>Alloc</u>& a =
- <u>Alloc</u>());
+<p>
+size_type n, 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>
+basic_string(const charT* s, const <u>Alloc</u>& a =
+<u>Alloc</u>());
- <p align="left">
- template<<u>InputIterator</u> <u>Iter</u>>
+<p>
+basic_string(size_type n, charT c, const <u>Alloc</u>&
+a = <u>Alloc</u>());
- <p align="left">
- basic_string(<u>Iter</u> begin, <u>Iter</u> end,
+<p>
+template<<u>InputIterator</u> <u>Iter</u>>
- <p align="left">
- const <u>Alloc</u>& a = <u>Alloc</u>());
+<p>
+basic_string(<u>Iter</u> begin, <u>Iter</u> end,
- <p align="left">
- basic_string(initializer_list<charT>, const
- <u>Alloc</u>& = <u>Alloc</u>());
+<p>
+const <u>Alloc</u>& a = <u>Alloc</u>());
- <p align="left">
- basic_string(const basic_string&, const
- <u>Alloc</u>&);
+<p>
+basic_string(initializer_list<charT>, const
+<u>Alloc</u>& = <u>Alloc</u>());
- <p align="left">
- basic_string(basic_string&&, const
- <u>Alloc</u>&);
+<p>
+basic_string(const basic_string&, const
+<u>Alloc</u>&);
- <p align="left">
- ~basic_string();
+<p>
+basic_string(basic_string&&, const
+<u>Alloc</u>&);
- <p align="left">
- basic_string& operator=(const basic_string& str);
+<p>
+~basic_string();
- <p align="left">
- basic_string& operator=(basic_string&& str);
+<p>
+basic_string& operator=(const basic_string& str);
- <p align="left">
- basic_string& operator=(const charT* s);
+<p>
+basic_string& operator=(basic_string&& str);
- <p align="left">
- basic_string& operator=(charT c);
+<p>
+basic_string& operator=(const charT* s);
- <p align="left">
- basic_string& operator=(initializer_list<charT>);
+<p>
+basic_string& operator=(charT c);
- <p align="left">
-
+<p>
+basic_string& operator=(initializer_list<charT>);
- <p align="left">//
- 21.3.3 iterators:
+<p>
+
- <p align="left">...
+<p>//
+21.3.3 iterators:
- <p align="left">
-
+<p>...
- <p align="left">//
- 21.3.4 capacity:
+<p>
+
- <p align="left">...
+<p>//
+21.3.4 capacity:
- <p align="left">
-
+<p>...
- <p align="left">//
- 21.3.5 element access:
+<p>
+
- <p align="left">...
+<p>//
+21.3.5 element access:
- <p align="left">
-
+<p>...
- <p align="left">//
- 21.3.6 modifiers:
+<p>
+
- <p align="left">...
+<p>//
+21.3.6 modifiers:
- <p align="left">
-
+<p>...
- <p align="left">
- basic_string& append(const basic_string& str);
+<p>
+
- <p align="left">
- basic_string& append(const basic_string& str,
- size_type pos,
+<p>
+basic_string& append(const basic_string& str);
- <p align="left">
- size_type n);
+<p>
+basic_string& append(const basic_string& str,
+size_type pos,
- <p align="left">
- basic_string& append(const charT* s, size_type n);
+<p>
+size_type n);
- <p align="left">
- basic_string& append(const charT* s);
+<p>
+basic_string& append(const charT* s, size_type n);
- <p align="left">
- basic_string& append(size_type n, charT c);
+<p>
+basic_string& append(const charT* s);
- <p align="left">
- template<<u>InputIterator</u> <u>Iter</u>>
+<p>
+basic_string& append(size_type n, charT c);
- <p align="left">
- basic_string& append(<u>Iter</u> first, <u>Iter</u>
- last);
+<p>
+template<<u>InputIterator</u> <u>Iter</u>>
- <p align="left">
- basic_string& append(initializer_list<charT>);
+<p>
+basic_string& append(<u>Iter</u> first, <u>Iter</u>
+last);
- <p align="left">
- void push_back(charT c);
+<p>
+basic_string& append(initializer_list<charT>);
- <p align="left">
-
+<p>
+void push_back(charT c);
- <p align="left">
- basic_string& assign(const basic_string& str);
+<p>
+
- <p align="left">
- basic_string& assign(basic_string&& str);
+<p>
+basic_string& assign(const basic_string& str);
- <p align="left">
- basic_string& assign(const basic_string& str,
- size_type pos,
+<p>
+basic_string& assign(basic_string&& str);
- <p align="left">
- size_type n);
+<p>
+basic_string& assign(const basic_string& str,
+size_type pos,
- <p align="left">
- basic_string& assign(const charT* s, size_type n);
+<p>
+size_type n);
- <p align="left">
- basic_string& assign(const charT* s);
+<p>
+basic_string& assign(const charT* s, size_type n);
- <p align="left">
- basic_string& assign(size_type n, charT c);
+<p>
+basic_string& assign(const charT* s);
- <p align="left">
- template<<u>InputIterator</u> <u>Iter</u>>
+<p>
+basic_string& assign(size_type n, charT c);
- <p align="left">
- basic_string& assign(<u>Iter</u> first, <u>Iter</u>
- last);
+<p>
+template<<u>InputIterator</u> <u>Iter</u>>
- <p align="left">
- basic_string& assign(initializer_list<charT>);
+<p>
+basic_string& assign(<u>Iter</u> first, <u>Iter</u>
+last);
- <p align="left">
-
+<p>
+basic_string& assign(initializer_list<charT>);
- <p align="left">
- basic_string& insert(size_type pos1, const
- basic_string& str);
+<p>
+
- <p align="left">
- basic_string& insert(size_type pos1, const
- basic_string& str,
+<p>
+basic_string& insert(size_type pos1, const
+basic_string& str);
- <p align="left">
- size_type pos2, size_type n);
+<p>
+basic_string& insert(size_type pos1, const
+basic_string& str,
- <p align="left">
- basic_string& insert(size_type pos, const charT* s,
- size_type n);
+<p>
+size_type pos2, size_type n);
- <p align="left">
- basic_string& insert(size_type pos, const charT* s);
+<p>
+basic_string& insert(size_type pos, const charT* s,
+size_type n);
- <p align="left">
- basic_string& insert(size_type pos, size_type n, charT
- c);
+<p>
+basic_string& insert(size_type pos, const charT* s);
- <p align="left">
- iterator insert(const_iterator p, charT c);
+<p>
+basic_string& insert(size_type pos, size_type n, charT
+c);
- <p align="left">
- void insert(const_iterator p, size_type n, charT c);
+<p>
+iterator insert(const_iterator p, charT c);
- <p align="left">
- template<<u>InputIterator</u> <u>Iter</u>>
+<p>
+void insert(const_iterator p, size_type n, charT c);
- <p align="left">
- void insert(const_iterator p, <u>Iter</u> first,
- <u>Iter</u> last);
+<p>
+template<<u>InputIterator</u> <u>Iter</u>>
- <p align="left">
- void insert(const_iterator p,
- initializer_list<charT>);
+<p>
+void insert(const_iterator p, <u>Iter</u> first,
+<u>Iter</u> last);
- <p align="left">
-
+<p>
+void insert(const_iterator p,
+initializer_list<charT>);
- <p align="left">...
+<p>
+
- <p align="left">
- basic_string& replace(size_type pos1, size_type n1,
+<p>...
- <p align="left">
- const basic_string& str);
+<p>
+basic_string& replace(size_type pos1, size_type n1,
- <p align="left">
- basic_string& replace(size_type pos1, size_type n1,
+<p>
+const basic_string& str);
- <p align="left">
- const basic_string& str,
+<p>
+basic_string& replace(size_type pos1, size_type n1,
- <p align="left">
- size_type pos2, size_type n2);
+<p>
+const basic_string& str,
- <p align="left">
- basic_string& replace(size_type pos, size_type n1,
- const charT* s,
+<p>
+size_type pos2, size_type n2);
- <p align="left">
- size_type n2);
+<p>
+basic_string& replace(size_type pos, size_type n1,
+const charT* s,
- <p align="left">
- basic_string& replace(size_type pos, size_type n1,
- const charT* s);
+<p>
+size_type n2);
- <p align="left">
- basic_string& replace(size_type pos, size_type n1,
- size_type n2,
+<p>
+basic_string& replace(size_type pos, size_type n1,
+const charT* s);
- <p align="left">
- charT c);
+<p>
+basic_string& replace(size_type pos, size_type n1,
+size_type n2,
- <p align="left">
- basic_string& replace(iterator i1, iterator i2,
+<p>
+charT c);
- <p align="left">
- const basic_string& str);
+<p>
+basic_string& replace(iterator i1, iterator i2,
- <p align="left">
- basic_string& replace(iterator i1, iterator i2, const
- charT* s,
+<p>
+const basic_string& str);
- <p align="left">
- size_type n);
+<p>
+basic_string& replace(iterator i1, iterator i2, const
+charT* s,
- <p align="left">
- basic_string& replace(iterator i1, iterator i2, const
- charT* s);
+<p>
+size_type n);
- <p align="left">
- basic_string& replace(iterator i1, iterator i2,
+<p>
+basic_string& replace(iterator i1, iterator i2, const
+charT* s);
- <p align="left">
- size_type n, charT c);
+<p>
+basic_string& replace(iterator i1, iterator i2,
- <p align="left">
- template<<u>InputIterator</u> <u>Iter</u>>
+<p>
+size_type n, charT c);
- <p align="left">
- basic_string& replace(iterator i1, iterator i2,
+<p>
+template<<u>InputIterator</u> <u>Iter</u>>
- <p align="left">
- <u>Iter</u> j1, <u>Iter</u> j2);
+<p>
+basic_string& replace(iterator i1, iterator i2,
- <p align="left">
- basic_string& replace(iterator, iterator,
- initializer_list<charT>);
+<p>
+<u>Iter</u> j1, <u>Iter</u> j2);
- <p align="left">
-
+<p>
+basic_string& replace(iterator, iterator,
+initializer_list<charT>);
- <p align="left">...
+<p>
+
- <p align="left">
-
+<p>...
- <p align="left">//
- 21.3.7 string operations:
+<p>
+
- <p align="left">...
+<p>//
+21.3.7 string operations:
- <p align="left">
-
+<p>...
- <p align="left">
- template <class charT, class traits, <u>Allocator</u>
- <u>Alloc></u>
+<p>
+
- <p align="left">
- struct constructible_with_allocator_suffix<
+<p>
+template <class charT, class traits, <u>Allocator</u>
+<u>Alloc></u>
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">
- basic_string<charT, traits, <u>Alloc</u>> > :
- true_type { };
+<p>
+struct constructible_with_allocator_suffix<
- <p align="left" style="margin-top: 0.04in">
- <br>
+<p>
+basic_string<charT, traits, <u>Alloc</u>> > :
+true_type { };
- <td>
- <p>
+<p>
+<br>
- See UK 216<tr valign="top">
- <td>
- <p>JP 47
+<td>See UK 216
- <td>
- <p align="left">21.3
+<tr valign="top">
+<td>JP47
- <td>
- <p align="left"><br>
+<td>21.3
- <td>
- <p>ed
+<td>
- <td>
- <p align="left">
- Typo. Missing ”>”
+<td>ed
- <p align="left">
- template <class charT, class traits, Allocator Alloc
+<td>
+Typo. Missing ”>”
- <p align="left">
- <br>
+<p>
+template <class charT, class traits, Allocator Alloc
- <p align="left">
- should be
+<p>
+<br>
- <p align="left">
- <br>
+<p>
+should be
- <p align="left">
- template <class charT, class traits, Allocator Alloc>
+<p>
+<br>
- <p align="left"><br>
+<p>
+template <class charT, class traits, Allocator Alloc>
- <td>
- <p align="left" style="margin-top: 0.04in">
- Correct typo.
+<td>
+Correct typo.
- <td>
- <p>
+<td>
- <tr valign="top">
- <td>
- <p><a name="JP48">JP 48</a>
+<tr valign="top">
+<td><a name="JP48">JP48</a>
- <td>
- <p align="left">21.3
+<td>21.3
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p>te
+<td>te
- <td>
- <p align="left">
- char_traits does not use concept.
+<td>
+char_traits does not use concept.
- <p align="left">For
- example, create CharTraits concept and change as follows:
+<p>For
+example, create CharTraits concept and change as follows:
- <p align="left">
- <br>
+<p>
+<br>
- <p align="left">
- template<class charT, <u>CharTraits</u> traits =
- char_traits<charT>,
+<p>
+template<class charT, <u>CharTraits</u> traits =
+char_traits<charT>,
- <p align="left">
- class Allocator = allocator<charT> >
+<p>
+class Allocator = allocator<charT> >
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">class
- basic_string {
+<p>class
+basic_string {
- <p align="left" style="margin-top: 0.04in">
- <br>
+<p>
+<br>
- <td>
- <p align="left" style="margin-top: 0.04in">Add
- a concept for char_traits.
+<td>Add
+a concept for char_traits.
- <td>
- <p>
+<td>See UK 216
- See UK 216<tr valign="top">
- <td>
- <p>UK<br>
- 217
+<tr valign="top">
+<td>UK217
- <td>
- <p align="justify">21.3
+<td>21.3
- <td>
- <p align="justify"><br>
+<td>
- <td>
- <p align="justify">Ed
+<td>Ed
- <td>
- <p align="left">basic_string refers to
- constructible_with_allocator_suffix, which I thought was
- removed?
+<td>basic_string refers to
+constructible_with_allocator_suffix, which I thought was
+removed?
- <td>
- <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 {
- };
+<td>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>[Being reviewed by Editor]
- <td>
- <p>
+<tr valign="top">
+<td>UK218
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 218
+<td>21.3.1
- <td>
- <p align="justify">21.3.1
+<td>3
- <td>
- <p align="justify">3
+<td>Te
- <td>
- <p align="justify">Te
+<td>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.
- <td>
- <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.
+<td>See my recommendations for "23.2.1,
+23.2.6".
- <p align="left"><br>
+<td>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.
- <td>
- <p align="left">See my recommendations for "23.2.1,
- 23.2.6".
+<tr valign="top">
+<td>UK219
- <td>
- <p>
+<td>21.3.6.6<br>
+[string.<br>
+replace]
- 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>
- <p>UK<br>
- 219
-
- <td>
- <p align="justify">21.3.6.6<br>
- [string.<br>
- replace]
-
- <td>
- <p align="justify">11
-
- <td>
- <p align="justify">Ed
-
- <td>
- <p align="left">Effects refers to "whose first begin() - i1
- elements" However i1 is greater than begin()...
-
- <td>
- <p align="left">Effects refers to "whose first i1 - begin()
- elements"
-
- <td>
- <p>
-
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 220
-
- <td>
- <p align="justify">21.3.8.9
-
- <td>
- <p align="justify"><br>
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <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>11
+
+<td>Ed
+
+<td>Effects refers to "whose first begin() - i1
+elements" However i1 is greater than begin()...
+
+<td>Effects refers to "whose first i1 - begin()
+elements"
+
+<td>[Being reviewed by Editor]
+
+<tr valign="top">
+<td>UK220
+
+<td>21.3.8.9
- <td>
- <p>
+<td>
- We did it differently for basic_string because otherwise rvalue strreaming
+<td>Te
+
+<td>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)
+
+<td>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>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>
- <p>FR 33
+ fixed by N2831 if it's accepted.
- <td>
- <p>22.1.1<br>
+<tr valign="top">
+<td>FR33
+
+<td>22.1.1<br>
[locale]
- <td>
- <p>3
+<td>3
- <td>
- <p>ed
+<td>ed
- <td>
- <p>ios_base::iostate err = 0;
+<td>ios_base::iostate err = 0;
- <p>
+<p>
- <p>iostate is a bitmask type and
- so could be an enumeration. Probably using
+<p>iostate is a bitmask type and
+so could be an enumeration. Probably using
- <p>goodbit is the solution.
+<p>goodbit is the solution.
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p>
+<td>[Being reviewed by Editor]
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>JP 49
+<tr valign="top">
+<td>JP49
- <td>
- <p align="left">22.1.3.<br>
- 2.2
+<td>22.1.3.<br>
+2.2
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p>te
+<td>te
- <td>
- <p align="left">
- codecvt does not use concept. For example, create
- CodeConvert concept and change as follows.
+<td>
+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 {
+<p>
+template<<u>CodeConvert</u> Codecvt, class Elem =
+wchar_t> class wstring_convert {
- <td>
- <p align="left" style="margin-top: 0.04in">Add
- a concept for codecvt.
+<td>Add
+a concept for codecvt.
- <td>
- <p>
+<td>to be handled by Howard Hinnant, Dave Abrahams, Martin Sebor, PJ Plauger
- to be handled by Howard Hinnant, Dave Abrahams, Martin Sebor, PJ Plauger<tr valign="top">
- <td>
- <p>JP 50
+<tr valign="top">
+<td>JP50
- <td>
- <p align="left">22.1.3.<br>
- 2.2
+<td>22.1.3.<br>
+2.2
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p>te
+<td>te
- <td>
- <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>Add
+custom allocator parameter to wstring_convert, since we
+cannot allocate memory for strings from a custom allocator.
- <td>
- <p align="left">
- Correct as follows.
+<td>
+Correct as follows.
- <p align="left">
- template<class Codecvt, class Elem = wchar_t> class
- wstring_convert {
+<p>
+template<class Codecvt, class Elem = wchar_t> class
+wstring_convert {
- <p align="left">
- public:
+<p>
+public:
- <p align="left">
- typedef std::basic_string<char> byte_string;
+<p>
+typedef std::basic_string<char> byte_string;
- <p align="left">
- typedef std::basic_string<Elem> wide_string;
+<p>
+typedef std::basic_string<Elem> wide_string;
- <p align="left">
-
+<p>
+
- <p align="left" style=
- "text-indent: 0.06in; margin-bottom: 0in">should be
+<p style=
+"text-indent: 0.06in; margin-bottom: 0in">should be
- <p align="left">
-
+<p>
+
- <p align="left">
- template<class Codecvt, class Elem = wchar_t<u>,</u>
+<p>
+template<class Codecvt, class Elem = wchar_t<u>,</u>
- <p align="left">
- <u>Allocator WideAllocator = allocator<Elem>,</u>
+<p>
+<u>Allocator WideAllocator = allocator<Elem>,</u>
- <p align="left">
- <u>Allocator ByteAllocator = allocator<char></u>>
+<p>
+<u>Allocator ByteAllocator = allocator<char></u>>
- <p align="left">
- class wstring_convert {
+<p>
+class wstring_convert {
- <p align="left">
- public:
+<p>
+public:
- <p align="left">
- typedef std::basic_string<char,
- <u>char_traits<char>, ByteAllocator</u>>
- byte_string;
+<p>
+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>typedef
+std::basic_string<Elem, <u>char_traits<Elem>,
+WideAllocator</u>> wide_string;
- <p align="left" style="margin-top: 0.04in">
- <br>
+<p>
+<br>
- <td>
- <p>
+<td>to be handled by PJ Plauger
- to be handled by PJ Plauger<tr valign="top">
- <td>
- <p>FI 4
+<tr valign="top">
+<td>FI4
- <td>
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">22.2.1.4.1
+<td>22.2.1.4.1
- <p>22.2.1.4.2
+<p>22.2.1.4.2
- <td>
- <p>
+<td>
- <td>
- <p>ed
+<td>ed
- <td>
- <p><tt>to_end and to_limit are both used. Only one is
- needed.</tt>
+<td><tt>to_end and to_limit are both used. Only one is
+needed.</tt>
- <td>
- <p>Change to_limit to to_end.
+<td>Change to_limit to to_end.
- <td>
- <p>
+<td>[Being reviewed by Editor]
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>FI 5
+<tr valign="top">
+<td>FI5
- <td>
- <p><tt>22.2.<br>
- 1.4.2</tt>
+<td><tt>22.2.<br>
+1.4.2</tt>
- <td>
- <p>#3
+<td>#3
- <td>
- <p>ed
+<td>ed
- <td>
- <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>
+<td><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><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>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>
+<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>
- <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><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>
- <p>
+<td>[Being reviewed by Editor]
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>FI 6
+<tr valign="top">
+<td>FI6
- <td>
- <p style=
- "margin-top: 0.04in; margin-bottom: 0.04in">22.2.1.5
+<td>22.2.1.5
- <p>See also<br>
+<p>See also<br>
22.2.1.4<br>
(1,2,3)
- <td>
- <p>
+<td>
+
+<td>te
- <td>
- <p>te
+<td>
+<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>
- <td>
- <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>
- <p><tt>There should be a built-in means to find a codecvt
- with a pair of character set names.</tt>
+<p>
- <td>
- <p>
+<td><tt>There should be a built-in means to find a codecvt
+with a pair of character set names.</tt>
- Martin Sebor interested in solving this problem (also POSIX group), but
+<td>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>
- <p>FI 7
+ for what looks like a new feature.
+
+<tr valign="top">
+<td>FI7
- <td>
- <p>22.2.1.4
+<td>22.2.1.4
- <td>
- <p>1,2,3
+<td>1,2,3
- <td>
- <p>ed
+<td>ed
- <td>
- <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).
+<td>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>
+<p>
- <td>
- <p>Change "codeset" to "character set."
+<td>Change "codeset" to "character set."
- <td>
- <p>
+<td>[Being reviewed by Editor]
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>JP 51
+<tr valign="top">
+<td>JP51
- <td>
- <p align="left">22.2.5.1.1
+<td>22.2.5.1.1
- <td>
- <p align="left">7<sup>th</sup> <font size="2"
- style="font-size: 11pt">para, 1<sup>st</sup>
- line</font>
+<td>7<sup>th</sup> <font size="2"
+style="font-size: 11pt">para, 1<sup>st</sup>
+line</font>
- <td>
- <p>ed
+<td>ed
- <td>
- <p align="left">A
- parameter `end’ should be `fmtend’.<br>
- get() function had two `end’ parameters at N2321.
+<td>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>
+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>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>
+<p>
+<br>
- <td>
- <p align="left">
- Correct as follows.
+<td>
+Correct as follows.
- <p align="left">
- Requires: [fmt,end) shall be a valid range.
+<p>
+Requires: [fmt,end) shall be a valid range.
- <p align="left">
- <br>
+<p>
+<br>
- <p align="left">
- should be
+<p>
+should be
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in"><br>
- <br>
+<p><br>
+<br>
- <p align="left" style="margin-top: 0.04in">
- Requires: [fmt,fmtend) shall be a valid range.
+<p>
+Requires: [fmt,fmtend) shall be a valid range.
- <td>
- <p>
+<td>[Being reviewed by Editor]
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>JP 52
+<tr valign="top">
+<td>JP52
- <td>
- <p align="left">22.2.5.1,<br>
- 22.2.5.2,<br>
- 22.2.6.1
+<td>22.2.5.1,<br>
+22.2.5.2,<br>
+22.2.6.1
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p>te
+<td>te
- <td>
- <p align="left" style="margin-top: 0.04in">
- InputIterator does not use concept.
+<td>
+InputIterator does not use concept.
- <td>
- <p align="left">
- Correct as follows.
+<td>
+Correct as follows.
- <p align="left">
- <br>
+<p>
+<br>
- <p align="left">
- 22.2.5.1
+<p>
+22.2.5.1
- <p align="left">
-
+<p>
+
- <p align="left">
- template <class charT, class InputIterator =
- istreambuf_iterator<charT> >
+<p>
+template <class charT, class InputIterator =
+istreambuf_iterator<charT> >
- <p align="left">
- class time_get : public locale::facet, public time_base {
+<p>
+class time_get : public locale::facet, public time_base {
- <p align="left">
- public:
+<p>
+public:
- <p align="left">
- typedef charT char_type;
+<p>
+typedef charT char_type;
- <p align="left">
- typedef InputIterator iter_type;
+<p>
+typedef InputIterator iter_type;
- <p align="left">
-
+<p>
+
- <p align="left">
- should be
+<p>
+should be
- <p align="left">
-
+<p>
+
- <p align="left">
- template <class charT, <u>InputIterator InputIter</u> =
- istreambuf_iterator<charT> >
+<p>
+template <class charT, <u>InputIterator InputIter</u> =
+istreambuf_iterator<charT> >
- <p align="left">
- class time_get : public locale::facet, public time_base {
+<p>
+class time_get : public locale::facet, public time_base {
- <p align="left">
- public:
+<p>
+public:
- <p align="left">
- typedef charT char_type;
+<p>
+typedef charT char_type;
- <p align="left">
- typedef <u>InputIter</u> iter_type;
+<p>
+typedef <u>InputIter</u> iter_type;
- <p align="left">
-
+<p>
+
- <p align="left">
-
+<p>
+
- <p align="left">
- 22.2.5.2
+<p>
+22.2.5.2
- <p align="left">
-
+<p>
+
- <p align="left">
- template <class charT, class InputIterator =
- istreambuf_iterator<charT> >
+<p>
+template <class charT, class InputIterator =
+istreambuf_iterator<charT> >
- <p align="left">
- class time_get_byname : public time_get<charT,
- InputIterator> {
+<p>
+class time_get_byname : public time_get<charT,
+InputIterator> {
- <p align="left">
- public:
+<p>
+public:
- <p align="left">
- typedef time_base::dateorder dateorder;
+<p>
+typedef time_base::dateorder dateorder;
- <p align="left">
- typedef InputIterator iter_type;
+<p>
+typedef InputIterator iter_type;
- <p align="left">
-
+<p>
+
- <p align="left">
- should be
+<p>
+should be
- <p align="left">
-
+<p>
+
- <p align="left">
- template <class charT, <u>InputIterator InputIter</u> =
- istreambuf_iterator<charT> >
+<p>
+template <class charT, <u>InputIterator InputIter</u> =
+istreambuf_iterator<charT> >
- <p align="left">
- class time_get_byname : public time_get<charT,
- InputIter> {
+<p>
+class time_get_byname : public time_get<charT,
+InputIter> {
- <p align="left">
- public:
+<p>
+public:
- <p align="left">
- typedef time_base::dateorder dateorder;
+<p>
+typedef time_base::dateorder dateorder;
- <p align="left">
- typedef <u>InputIter</u> iter_type;
+<p>
+typedef <u>InputIter</u> iter_type;
- <p align="left">
-
+<p>
+
- <p align="left">
-
+<p>
+
- <p align="left">
- 22.2.6.1
+<p>
+22.2.6.1
- <p align="left">
-
+<p>
+
- <p align="left">
- template <class charT,
+<p>
+template <class charT,
- <p align="left">
- class InputIterator = istreambuf_iterator<charT> >
+<p>
+class InputIterator = istreambuf_iterator<charT> >
- <p align="left">
- class money_get : public locale::facet {
+<p>
+class money_get : public locale::facet {
- <p align="left">
- public:
+<p>
+public:
- <p align="left">
- typedef charT char_type;
+<p>
+typedef charT char_type;
- <p align="left">
- typedef InputIterator iter_type;
+<p>
+typedef InputIterator iter_type;
- <p align="left">
-
+<p>
+
- <p align="left">
- should be
+<p>
+should be
- <p align="left">
-
+<p>
+
- <p align="left">
- template <class charT,
+<p>
+template <class charT,
- <p align="left">
- <u>InputIterator InputIter</u> =
- istreambuf_iterator<charT> >
+<p>
+<u>InputIterator InputIter</u> =
+istreambuf_iterator<charT> >
- <p align="left">
- class money_get : public locale::facet {
+<p>
+class money_get : public locale::facet {
- <p align="left">
- public:
+<p>
+public:
- <p align="left">
- typedef charT char_type;
+<p>
+typedef charT char_type;
- <p align="left">
- typedef <u>InputIter</u> iter_type;
+<p>
+typedef <u>InputIter</u> iter_type;
- <p align="left"><br>
+<td>to be handled by Howard Hinnant, Dave Abrahams, Martin Sebor, PJ Plauger
- <td>
- <p>
+<tr valign="top">
+<td>JP53
- to be handled by Howard Hinnant, Dave Abrahams, Martin Sebor, PJ Plauger<tr valign="top">
- <td>
- <p>JP 53
+<td>22.2.5.3 ,<br>
+22.2.5.4
- <td>
- <p align="left">22.2.5.3 ,<br>
- 22.2.5.4
+<td>
- <td>
- <p align="left"><br>
+<td>te
- <td>
- <p>te
+<td>
+OutputIterator does not use concept.
- <td>
- <p align="left" style="margin-top: 0.04in">
- OutputIterator does not use concept.
+<td>
+Correct as follows.
- <td>
- <p align="left">
- Correct as follows.
+<p>
+
- <p align="left">
-
+<p>
+22.2.5.3
- <p align="left">
- 22.2.5.3
+<p>
+
- <p align="left">
-
+<p>
+template <class charT, class OutputIterator =
+ostreambuf_iterator<charT> >
- <p align="left">
- template <class charT, class OutputIterator =
- ostreambuf_iterator<charT> >
+<p>
+class time_put : public locale::facet {
- <p align="left">
- class time_put : public locale::facet {
+<p>
+public:
- <p align="left">
- public:
+<p>
+typedef charT char_type;
- <p align="left">
- typedef charT char_type;
+<p>
+typedef OutputIterator iter_type;
- <p align="left">
- typedef OutputIterator iter_type;
+<p>
+
- <p align="left">
-
+<p>
+<span lang="zxx"> </span>should be
- <p align="left">
- <span lang="zxx"> </span>should be
+<p>
+
- <p align="left">
-
+<p>
+template <class charT, <u>OutputIterator OutputIter</u>
+= ostreambuf_iterator<charT> >
- <p align="left">
- template <class charT, <u>OutputIterator OutputIter</u>
- = ostreambuf_iterator<charT> >
+<p>
+class time_put : public locale::facet {
- <p align="left">
- class time_put : public locale::facet {
+<p>
+public:
- <p align="left">
- public:
+<p>
+typedef charT char_type;
- <p align="left">
- typedef charT char_type;
+<p>
+typedef <u>OutputIter</u> iter_type;
- <p align="left">
- typedef <u>OutputIter</u> iter_type;
+<p>
+
- <p align="left">
-
+<p>
+
- <p align="left">
-
+<p>
+22.2.5.4
- <p align="left">
- 22.2.5.4
+<p>
+
- <p align="left">
-
+<p>
+template <class charT, class OutputIterator =
+ostreambuf_iterator<charT> >
- <p align="left">
- template <class charT, class OutputIterator =
- ostreambuf_iterator<charT> >
+<p>
+class time_put_byname : public time_put<charT,
+OutputIterator>
- <p align="left">
- class time_put_byname : public time_put<charT,
- OutputIterator>
+<p>{
- <p align="left">{
+<p>
+public:
- <p align="left">
- public:
+<p>
+typedef charT char_type;
- <p align="left">
- typedef charT char_type;
+<p>
+typedef OutputIterator iter_type;
- <p align="left">
- typedef OutputIterator iter_type;
+<p>
+
- <p align="left">
-
+<p>
+should be
- <p align="left">
- should be
+<p>
+
- <p align="left">
-
+<p>
+template <class charT, <u>OutputIterator OutputIter</u>
+= ostreambuf_iterator<charT> >
- <p align="left">
- template <class charT, <u>OutputIterator OutputIter</u>
- = ostreambuf_iterator<charT> >
+<p>
+class time_put_byname : public time_put<charT,
+OutputIter>
- <p align="left">
- class time_put_byname : public time_put<charT,
- OutputIter>
+<p>{
- <p align="left">{
+<p>
+public:
- <p align="left">
- public:
+<p>
+typedef charT char_type;
- <p align="left">
- typedef charT char_type;
+<p>typedef <u>OutputIter</u>
+iter_type;
- <p align="left">typedef <u>OutputIter</u>
- iter_type;
+<td>to be handled by Howard Hinnant, Dave Abrahams, Martin Sebor, PJ Plauger
- <td>
- <p>
+<tr valign="top">
+<td>JP54
- to be handled by Howard Hinnant, Dave Abrahams, Martin Sebor, PJ Plauger<tr valign="top">
- <td>
- <p>JP 54
+<td>23
- <td>
- <p align="left">23
+<td>
+2<sup>nd</sup> <font size="2" style=
+"font-size: 11pt">para, Table 79</font>
- <td>
- <p align="left">
- 2<sup>nd</sup> <font size="2" style=
- "font-size: 11pt">para, Table 79</font>
+<td>ed
- <p align="left"><br>
+<td>
+There is not <forward_list> in Table 79.
- <td>
- <p>ed
+<td>Add
+<forward_list> between <deque> and
+<list>.
- <td>
- <p align="left" style="margin-top: 0.04in">
- There is not <forward_list> in Table 79.
+<td>[Being reviewed by Editor]
- <td>
- <p align="left" style="margin-top: 0.04in">Add
- <forward_list> between <deque> and
- <list>.
+<tr valign="top">
+<td>UK221
- <td>
- <p>
+<td>23
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 221
+<td>Table 79
- <td>
- <p align="justify">23
+<td>Ed
- <td>
- <p align="justify">Table 79
+<td>The table is missing the new
+<forward_list> header.
- <td>
- <p align="justify">Ed
+<td>Add
+<forward_list> to the table for sequence containers.
+Alternative (technical) solution might be to merge
+<forward_list> into <list>.
- <td>
- <p align="left">The table is missing the new
- <forward_list> header.
+<td>[Being reviewed by Editor]
- <td>
- <p align="left">Add
- <forward_list> to the table for sequence containers.
- Alternative (technical) solution might be to merge
- <forward_list> into <list>.
+<tr valign="top">
+<td>UK222
- <p align="left"><br>
+<td>23
- <td>
- <p>
+ [container.<br>
+require-ments]<td>
+
+<td>Te
+
+<td>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?
+
+<td>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>Agree in principle. We suggest proposed wording:
+
+<tr valign="top">
+<td>JP55
+
+<td>23.1.1
+
+<td>
+3<sup>rd</sup> <font size="2" style=
+"font-size: 11pt">para, 4<sup>th</sup> line</font>
+
+<td>ed
+
+<td>It
+seems that “the MinimalAllocator concep” is the
+typo of “the MinimalAllocator concept”.
+
+<td>
+Change to … models the MinimalAllocator
+concep<font color="#339966">t</font><font size="2" style=
+"font-size: 11pt">.</font>
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 222
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">23
+<tr valign="top">
+<td>UK223
+
+<td>23.1.1
[container.<br>
- require-ments]<td>
- <p align="justify"><br>
+require-ments.<br>
+general]<td>3
+
+<td>Te
+
+<td>The library does
+not define the MinimalAllocator or ScopedAllocator
+concepts, these were part of an earlier Allocators proposal
+that was rejected.
- <td>
- <p align="justify">Te
+<td>Remove the references to MinimalAllocator
+and ScopedAllocator, or add definitions for these concepts
+to clause 20.7.
- <td>
- <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>
- <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>
- <p>
-
- Agree in principle. We suggest proposed wording:<tr valign="top">
- <td>
- <p>JP 55
-
- <td>
- <p align="left">23.1.1
-
- <td>
- <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>
- <p>ed
-
- <td>
- <p align="left" style="margin-top: 0.04in">It
- seems that “the MinimalAllocator concep” is the
- typo of “the MinimalAllocator concept”.
-
- <td>
- <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>
- <p>
-
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 223
+<td>Agree. Proposed wording will be presented
+ in N2829 or D2840.
- <td>
- <p align="justify">23.1.1
+<tr valign="top">
+<td><a name="UK224">UK224</a>
+
+<td>23.1.1<br>
[container.<br>
- require-ments.<br>
- general]<td>
- <p align="justify">3
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <p align="left">Remove the references to MinimalAllocator
- and ScopedAllocator, or add definitions for these concepts
- to clause 20.7.
-
- <td>
- <p>
-
- Agree. Proposed wording will be presented
- in N2829 or D2840.<tr valign="top">
- <td>
- <p><a name="UK224">UK<br>
- 224</a>
+require-ments.<br>
+general]<td>8
+
+<td>Te
+
+<td>This paragraph implicitly requires all
+containers in clause 23 to support allocators, which
+std::array does not.
+
+<td>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.
+
+<td>Agree except with moving array to clause
+ 20. Proposed wording will be presented in D2840.
+
+<tr valign="top">
+<td>UK225
+
+<td>23.1.1
+
+<td>Table 81
+
+<td>Ed
+
+<td>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
+
+<td>Change return types for
+X::(const)_reverse_iterator to say "iterator type whose
+value type is (const) T".
- <td>
- <p align="justify">23.1.1<br>
+<td>[Being reviewed by Editor]
+
+<tr valign="top">
+<td>UK226
+
+<td>23.1.1
[container.<br>
- require-ments.<br>
- general]<td>
- <p align="justify">8
-
- <td>
- <p align="justify">Te
-
- <td>
- <p align="left">This paragraph implicitly requires all
- containers in clause 23 to support allocators, which
- std::array does not.
-
- <td>
- <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>
- <p>
-
- Agree except with moving array to clause
- 20. Proposed wording will be presented in D2840.<tr valign="top">
- <td>
- <p>UK<br>
- 225
-
- <td>
- <p align="justify">23.1.1
-
- <td>
- <p align="justify">Table 81
-
- <td>
- <p align="justify">Ed
-
- <td>
- <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>
- <p align="left">Change return types for
- X::(const)_reverse_iterator to say "iterator type whose
- value type is (const) T".
-
- <td>
- <p>
-
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 226
+require-ments.<br>
+general]<td>10
+
+<td>Te
+
+<td><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.
+
+<td>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>Agree. The proposed resolution is
+ incomplete. Further work required.
+
+<tr valign="top">
+<td>UK227
+
+<td>23.1.1
+
+<td>Table 80
+
+<td>Ed
+
+<td>The post-condition for a = rv uses the word
+“construction” when it means
+“assignment”
+
+<td>Replace the word
+“construction” with the word
+“assignment”
+
+<td>[Being reviewed by Editor]
+
+<tr valign="top">
+<td>UK228
+
+<td>23.1.1
+
+<td>3
+
+<td>Ed
+
+<td>Line 4 contains
+a spelling mistake in the fragment "MinimalAllocator
+concep."
+
+<td>Replace "concep" with "concept"
+
+<td>[Being reviewed by Editor]
+
+<tr valign="top">
+<td>UK229
+
+<td>23.1.1
+
+<td>3
+
+<td>Ed
- <td>
- <p align="justify">23.1.1
+<td>The fragment "A container may directly call
+constructors" is not technically correct as constructors
+are not callable.
+
+<td>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"
+
+<td>[Being reviewed by Editor]
+
+<tr valign="top">
+<td>UK230
+
+<td>23.1.2
[container.<br>
- require-ments.<br>
- general]<td>
- <p align="justify">10
+require-ments.<br>
+dataraces]<td>1
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <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.
+<td>
+“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>Clarify what is meant and what requirements
+an implementation must satisfy.
- <td>
- <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>After considerable discussion and
+ consideration, we do not feel this is a defect given the reference to [res.on.data.races].
- <td>
- <p>
+<tr valign="top">
+<td>JP56
- Agree. The proposed resolution is
- incomplete. Further work required.<tr valign="top">
- <td>
- <p>UK<br>
- 227
+<td>23.1.3
- <td>
- <p align="justify">23.1.1
+<td>12<sup>th</sup> <font size="2"
+style="font-size: 11pt">para, Table 84</font>
- <td>
- <p align="justify">Table 80
+<td>ed
- <td>
- <p align="justify">Ed
+<td>
+`array’ is unstated in Table 84 - Optional sequence
+container operations.
- <td>
- <p align="left">The post-condition for a = rv uses the word
- “construction” when it means
- “assignment”
+<td>Add
+`array’ to Container field for the following
+Expression.
- <td>
- <p align="left">Replace the word
- “construction” with the word
- “assignment”
+<p style=
+"text-indent: 0.15in; margin-bottom: 0in">a.front()
- <p align="left"><br>
+<p style=
+"text-indent: 0.15in; margin-bottom: 0in">a.back()
- <td>
- <p>
+<p style=
+"text-indent: 0.15in; margin-bottom: 0in">a[n]
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 228
+<p style=
+"text-indent: 0.15in; margin-top: 0.04in">a.at(n)
- <td>
- <p align="justify">23.1.1
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">3
+<tr valign="top">
+<td>UK231
- <td>
- <p align="justify">Ed
+<td>23.1.3 [sequence.<br>
+reqmts]<td>9-11
- <td>
- <p align="left">Line 4 contains
- a spelling mistake in the fragment "MinimalAllocator
- concep."
+<td>Te
- <p align="left"><br>
+<td>These paragraphs
+are redundant now that Concepts define what it means to be
+an Iterator and guide overload resolution accordingly.
- <td>
- <p align="left">Replace "concep" with "concept"
+<td>Strike 23.1.3p9-11. Make sure
+std::basic_string has constraints similar to std::vector to
+meet this old guarantee.
- <td>
- <p>
+<td>Agree with issue and change to [sequence.reqmts]. The changes required to
+ [strings] will be part of the general concept support for that clause.
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 229
+<tr valign="top">
+<td>UK232
- <td>
- <p align="justify">23.1.1
+<td>23.1.3 [sequence.<br>
+reqmts]<td>Table 84
- <td>
- <p align="justify">3
+<td>Te
- <td>
- <p align="justify">Ed
+<td>match_results
+may follow the requirements but is not listed a general
+purpose library container.
- <td>
- <p align="left">The fragment "A container may directly call
- constructors" is not technically correct as constructors
- are not callable.
+<td>Remove reference to match_results against
+a[n] operation
- <td>
- <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"
+<td>Agree. <code>operator[]</code> is defined elsewhere.
- <p align="left"><br>
+<tr valign="top">
+<td>UK233
- <td>
- <p>
+<td>23.1.3 [sequence.<br>
+reqmts]<td>Table 84
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 230
+<td>Te
- <td>
- <p align="justify">23.1.2
+<td>Add references to the new containers.
- [container.<br>
- require-ments.<br>
- dataraces]<td>
- <p align="justify">1
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <p align="left">Clarify what is meant and what requirements
- an implementation must satisfy.
-
- <td>
- <p>
-
- 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
-
- <td>
- <p align="left">23.1.3
-
- <td>
- <p align="left">12<sup>th</sup> <font size="2"
- style="font-size: 11pt">para, Table 84</font>
-
- <td>
- <p>ed
-
- <td>
- <p align="left" style="margin-top: 0.04in">
- `array’ is unstated in Table 84 - Optional sequence
- container operations.
-
- <td>
- <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>
- <p>
-
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 231
-
- <td>
- <p align="justify">23.1.3 [sequence.<br>
- reqmts]<td>
- <p align="justify">9-11
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <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>
- <p>
-
- 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 [sequence.<br>
- reqmts]<td>
- <p align="justify">Table 84
-
- <td>
- <p align="justify">Te
-
- <td>
- <p align="left">match_results
- may follow the requirements but is not listed a general
- purpose library container.
-
- <p align="left"><br>
-
- <td>
- <p align="left">Remove reference to match_results against
- a[n] operation
-
- <td>
- <p>
-
- Agree. <code>operator[]</code> is defined elsewhere.<tr valign="top">
- <td>
- <p>UK<br>
- 233
-
- <td>
- <p align="justify">23.1.3 [sequence.<br>
- reqmts]<td>
- <p align="justify">Table 84
-
- <td>
- <p align="justify">Te
-
- <td>
- <p align="left">Add references to the new containers.
-
- <td>
- <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>
- <p>
-
- Agree.<tr valign="top">
- <td>
- <p>UK<br>
- 234
-
- <td>
- <p align="justify">23.1.3 [sequence.<br>
- reqmts]<td>
- <p align="justify">Table 84
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <p align="left">Replace iterator with auto in semantics for
- back: { auto tmp = a.end(); --tmp; return *tmp; }
-
- <td>
- <p>
-
- Agree.<tr valign="top">
- <td>
- <p>UK<br>
- 235
-
- <td>
- <p align="justify">23.1.3
-
- <td>
- <p align="justify">1
-
- <td>
- <p align="justify">Ed
-
- <td>
- <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>
- <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>
- <p>
-
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 236
-
- <td>
- <p align="justify">23.1.3
-
- <td>
- <p align="justify">2
-
- <td>
- <p align="justify">Ed
-
- <td>
- <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>
- <p align="left">Remove this paragraph
-
- <td>
- <p>
-
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 237
-
- <td>
- <p align="justify">23.1.3
-
- <td>
- <p align="justify">2
-
- <td>
- <p align="justify">Ed
-
- <td>
- <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>
- <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>
- <p>
-
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 238
-
- <td>
- <p align="justify">23.1.4 [assoc-iative.<br>
- reqmts]<td>
- <p align="justify">6
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <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>
- <p>
-
- 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 [assoc-iative.<br>
- reqmts]<td>
- <p align="justify">85
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <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>
- <p>
-
- 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 <br>
- [container.<br>
- concepts.<br>
- free]<td>
- <p align="justify">12
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <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>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).
- <td>
- <p>
+<td>Agree.
- 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
+<tr valign="top">
+<td>UK234
- <td>
- <p align="left">23.1.6.3
+<td>23.1.3 [sequence.<br>
+reqmts]<td>Table 84
- <td>
- <p align="left">
- 1<sup>st</sup> <font size="2" style=
- "font-size: 11pt">para, 4<sup>th</sup> line</font>
+<td>Te
- <p align="left"><br>
+<td>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.
- <td>
- <p>ed
+<td>Replace iterator with auto in semantics for
+back: { auto tmp = a.end(); --tmp; return *tmp; }
- <td>
- <p align="left">
- Typo, duplicated "to"
+<td>Agree.
- <p align="left" style="margin-top: 0.04in">
- "<u>to to</u> model insertion container concepts."
+<tr valign="top">
+<td>UK235
- <td>
- <p align="left" style="margin-top: 0.04in">
- Remove one.
+<td>23.1.3
- <td>
- <p>
+<td>1
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 241
+<td>Ed
- <td>
- <p align="justify">23.2.1
+<td>“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>
- <p align="justify"><br>
+<td>Change the text
+to read: “The library provides five basic kinds of
+sequence containers: array, deque, forward_list, list and
+vector”.
- <td>
- <p align="justify">Te
+<td>[Being reviewed by Editor]
- <td>
- <p align="left">std::array does
- not have an allocator, so need to document an exception to
- the requirements of 23.1.1p3
+<tr valign="top">
+<td>UK236
- <p align="left"><br>
+<td>23.1.3
- <td>
- <p align="left">add exception to 23.1.1p3
+<td>2
- <td>
- <p>
+<td>Ed
- Duplicate of UK 224.<tr valign="top">
- <td>
- <p>UK<br>
- 242
+<td>[ 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
- <td>
- <p align="justify">23.2.1
+<td>Remove this paragraph
- <td>
- <p align="justify">3
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">Ed
+<tr valign="top">
+<td>UK237
- <td>
- <p align="left">std:: qualification no longer needed for
- reverse_iterator.
+<td>23.1.3
- <td>
- <p align="left">remove std::
- qualification from std::reverse_iterator<iterator>
- and std::reverse_iterator<const_iterator>
+<td>2
- <p align="left"><br>
+<td>Ed
- <td>
- <p>
+<td>vector, list, and deque offer the
+programmer different complexity trade-offs and should be
+used accordingly - this ignores array and forward_list
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>UK<br>
- 243
+<td>Modify the text
+to read: "array, deque, forward_list, list and vector offer
+the programmer different complexity trade-offs and should
+be used accordingly"
- <td>
- <p align="justify">23.2.1 <br>
- [array]<td>
- <p align="justify">3
+<td>[Being reviewed by Editor]
- <td>
- <p align="justify">Te
+<tr valign="top">
+<td>UK238
- <td>
- <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&).
+<td>23.1.4 [assoc-iative.<br>
+reqmts]<td>6
- <p align="left"><br>
+<td>Te
- <td>
- <p align="left">add the other two swaps.
+<td>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.
- <td>
- <p>
+<td>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]
- 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.<p>
+<td>Agree with issue. Agree with adding the note but not with changing the
+ normative text. We believe the note provides sufficient guidance.
- <strong>HOWEVER</strong> in a later session discussing D2844, it was decided
- to remove all the r-value-ref <code>swap</code> overloads from containers.
- Therefore adding them to <code>array</code> has no benefit. So the final
- disposition is NAD.<tr valign="top">
- <td>
- <p>UK<br>
- 244
+<tr valign="top">
+<td>UK239
- <td>
- <p align="justify">23.2.1,<br>
- 23.2.6<br>
- [array], [vector]
+<td>23.1.4 [assoc-iative.<br>
+reqmts]<td>85
- <td>
- <p align="justify">1
+<td>Te
- <td>
- <p align="justify">Te
+<td>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>
- <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>
- <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>
- <p>
-
- 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><a name="UK245">UK<br>
- 245</a>
-
- <td>
- <p align="justify">23.2.3
-
- <td>
- <p align="justify">2
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <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);
+<td>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>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.
- <p align="left"><br>
+<tr valign="top">
+<td>UK240
- <td>
- <p>
+<td>23.1.6.1 <br>
+[container.<br>
+concepts.<br>
+free]<td>12
- UK245 with additional comments on UK200 in clause 20: After further
- discussion of UK200, we do not think adding constraints to predicates is a
- good idea. Straw poll on
- UK245: status quo, 5 pro - 0 con; add copy-constructible, 1 pro - 3 con; no
- consensus for moving away from the status quo.
+<td>Te
- <tr valign="top">
- <td>
- <p>JP 58
+<td>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,
- <td>
- <p align="left">23.2.3.2
+<td>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>
- <p align="left">
- 1<sup>st</sup> <font size="2" style="font-size: 11pt">line
- before 1<sup>st</sup> para</font>
+<td>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).
- <p align="left"><br>
+<tr valign="top">
+<td>JP57
- <td>
- <p>ed
+<td>23.1.6.3
- <td>
- <p align="left" style="margin-top: 0.04in">
- Unnecessary "{" exists before a word iterator like
- "{iterator before_begin()".
+<td>
+1<sup>st</sup> <font size="2" style=
+"font-size: 11pt">para, 4<sup>th</sup> line</font>
- <td>
- <p align="left" style="margin-top: 0.04in">
- Remove "{"
+<td>ed
- <td>
- <p>
+<td>
+Typo, duplicated "to"
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p>JP 59
+<p>
+"<u>to to</u> model insertion container concepts."
- <td>
- <p align="left">23.2.4.4
+<td>
+Remove one.
- <td>
- <p align="left"><br>
+<td>[Being reviewed by Editor]
- <td>
- <p>ed
+<tr valign="top">
+<td>UK241
- <td>
- <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>23.2.1
- <td>
- <p align="left">
- Correct as follows.
+<td>
- <p align="left">
- void splice(const_iterator position,
- list<T,Allocator>&& x, iterator i);
+<td>Te
- <p align="left">
- void splice(const_iterator position,
- list<T,Allocator>&& x,
+<td>std::array does
+not have an allocator, so need to document an exception to
+the requirements of 23.1.1p3
- <p align="left">
- iterator first, iterator last);
+<td>add exception to 23.1.1p3
- <p align="left">
- <br>
+<td>Duplicate of UK 224.
- <p align="left">
- should be
+<tr valign="top">
+<td>UK242
- <p align="left">
- <br>
+<td>23.2.1
- <p align="left">
- void splice(const_iterator position,
- list<T,Allocator>&& x, const_iterator i);
+<td>3
- <p align="left">
- void splice(const_iterator position,
- list<T,Allocator>&& x,
+<td>Ed
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">const_iterator
- first, const_iterator last);
+<td>std:: qualification no longer needed for
+reverse_iterator.
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>remove std::
+qualification from std::reverse_iterator<iterator>
+and std::reverse_iterator<const_iterator>
- <td>
- <p>
+<td>[Being reviewed by Editor]
- [Being reviewed by Editor]<tr valign="top">
- <td>
- <p align="left">US 83
+<tr valign="top">
+<td>UK243
- <td>
- <p align="left">23.2.6.2
+<td>23.2.1 <br>
+[array]<td>3
- <td>
- <p align="left">7
+<td>Te
- <td>
- <p align="left">ed
+<td>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&).
- <td>
- <p align="left">
- "shrink_to_fint" should be "shrink_to_fit".
+<td>add the other two swaps.
- <p align="left">
- <br>
+<td>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.<p>
- <p align="left"><br>
+ <strong>HOWEVER</strong> in a later session discussing D2844, it was decided
+ to remove all the r-value-ref <code>swap</code> overloads from containers.
+ Therefore adding them to <code>array</code> has no benefit. So the final
+ disposition is NAD.
- <td>
- <p align="left"><br>
+<tr valign="top">
+<td>UK244
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<td>23.2.1,<br>
+ 23.2.6<br>
+[array], [vector]
- <tr valign="top">
- <td>
- <p>UK<br>
- 246
+<td>1
- <td>
- <p align="justify">23.3.2.2
+<td>Te
- <td>
- <p align="justify"><br>
+<td>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).
+
+<td>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>Agree with the issue but not the details of the proposed solution. Walter to
+ provide wording for the new concept.
+
+<tr valign="top">
+<td><a name="UK245">UK245</a>
+
+<td>23.2.3
+
+<td>2
+
+<td>Te
+
+<td>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>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);
- <td>
- <p align="justify">Ed
+<p><br>
- <td>
- <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.
+<td>UK245 with additional comments on UK200 in clause 20: After further
+ discussion of UK200, we do not think adding constraints to predicates is a
+ good idea. Straw poll on
+ UK245: status quo, 5 pro - 0 con; add copy-constructible, 1 pro - 3 con; no
+ consensus for moving away from the status quo.
- <p align="left"><br>
+
- <td>
- <p align="left">Strike 23.3.2.2 entirely. (but do NOT
- strike these signatures from the class template
- definition!)
+<tr valign="top">
+<td>JP58
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<td>23.2.3.2
- <tr valign="top">
- <td>
- <p>UK<br>
- 247
+<td>
+1<sup>st</sup> <font size="2" style="font-size: 11pt">line
+before 1<sup>st</sup> para</font>
- <td>
- <p align="justify">24.1
+<td>ed
- <td>
- <p align="justify"><br>
+<td>
+Unnecessary "{" exists before a word iterator like
+"{iterator before_begin()".
- <td>
- <p align="justify">Ge
+<td>
+Remove "{"
- <td>
- <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>.
+<td>[Being reviewed by Editor]
- <p align="left"><br>
+<tr valign="top">
+<td>JP59
- <td>
- <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>23.2.4.4
- <td>
- <p align="left">NAD. We believe the separate header to have value.<br>
+<td>
- <tr valign="top">
- <td>
- <p>UK<br>
- 248
+<td>ed
- <td>
- <p align="justify">24.1
+<td>
+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>
- <p align="justify">6
+<td>
+Correct as follows.
- <td>
- <p align="justify">Ed
+<p>
+void splice(const_iterator position,
+list<T,Allocator>&& x, iterator i);
- <td>
- <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>
+void splice(const_iterator position,
+list<T,Allocator>&& x,
- <p align="left"><br>
+<p>
+iterator first, iterator last);
- <td>
- <p align="left">Replace the reference to container with a
- more appropriate concept
+<p>
+<br>
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<p>
+should be
- <tr valign="top">
- <td>
- <p>UK<br>
- 250
+<p>
+<br>
- <td>
- <p align="justify">24.1.1
+<p>
+void splice(const_iterator position,
+list<T,Allocator>&& x, const_iterator i);
- <td>
- <p align="justify"><br>
+<p>
+void splice(const_iterator position,
+list<T,Allocator>&& x,
- <td>
- <p align="justify">Te
+<p>const_iterator
+first, const_iterator last);
- <td>
- <p align="left">A default implementation should be supplied
- for the post-increment operator to simplify implementation
- of iterators by users.
+<p>
+<br>
- <td>
- <p align="left">Copy the Effects clause into the concept
- description as the default implementation. Assumes a
- default value for postincrement_result
+<td>[Being reviewed by Editor]
- <td>
- <p align="left">Howard will open an issue.<br>
+<tr valign="top">
+<td>US83
- <tr valign="top">
- <td>
- <p>UK<br>
- 251
+<td>23.2.6.2
- <td>
- <p align="justify">24.1.1
+<td>7
- <td>
- <p align="justify">3
+<td>ed
- <td>
- <p align="justify">Te
+<td>
+"shrink_to_fint" should be "shrink_to_fit".
- <td>
- <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>
+<br>
- <p align="left"><br>
+<td>
- <td>
- <p align="left">Move declaration of postincrement operator
- and postincrement_result type from Interator concept to the
- ForwardIterator concept
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">Alisdair will open an issue.<br>
+
- <tr valign="top">
- <td>
- <p align="justify" style=
- "margin-right: -0.18in; margin-bottom: 0in">UK<br>
- 252
+<tr valign="top">
+<td>UK246
- <p>
+<td>23.3.2.2
- <td>
- <p align="justify">24.1.2
+<td>
- <td>
- <p align="justify">3
+<td>Ed
- <td>
- <p align="justify">Ed
+<td>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.
- <td>
- <p align="left">istream_iterator is not a class, but a
- class template
+<td>Strike 23.3.2.2 entirely. (but do NOT
+strike these signatures from the class template
+definition!)
- <td>
- <p align="left">Change 'class' to 'class template' in the
- note.
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 253
+<tr valign="top">
+<td>UK247
- <td>
- <p align="justify">24.1.3
+<td>24.1
- <td>
- <p align="justify">1
+<td>
- <td>
- <p align="justify">Ed
+<td>Ge
- <td>
- <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
+<td>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>.
+
+<td>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.
- <p align="left"><br>
+<td>NAD. We believe the separate header to have value.<br>
- <td>
- <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>
- <p align="left">[Being reviewed by Editor]<br>
+<tr valign="top">
+<td>UK248
- <tr valign="top">
- <td>
- <p>UK<br>
- 254
+<td>24.1
- <td>
- <p align="justify">24.1.3
+<td>6
- <td>
- <p align="justify">5
+<td>Ed
- <td>
- <p align="justify">Te
+<td>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.
- <td>
- <p align="left">This
- postcondition for pre-increment operator should be written
- as an axiom
+<td>Replace the reference to container with a
+more appropriate concept
- <p align="left"><br>
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">Move the postcondition into the concept
- definition as an axiom
+
- <td>
- <p align="left">deferred until we know whether we have axioms.<br>
+<tr valign="top">
+<td>UK250
- <tr valign="top">
- <td>
- <p>UK<br>
- 255
+<td>24.1.1
- <td>
- <p align="justify">24.1.4
+<td>
- <td>
- <p align="justify">4
+<td>Te
- <td>
- <p align="justify">Te
+<td>A default implementation should be supplied
+for the post-increment operator to simplify implementation
+of iterators by users.
- <td>
- <p align="left">This
- postcondition for pre-increment operator should be written
- as an axiom
+<td>Copy the Effects clause into the concept
+description as the default implementation. Assumes a
+default value for postincrement_result
- <p align="left"><br>
+<td>Howard will open an issue.<br>
- <td>
- <p align="left">Move the postcondition into the concept
- definition as an axiom
+
- <td>
- <p align="left">deferred until we know whether we have axioms.<br>
+<tr valign="top">
+<td>UK251
- <tr valign="top">
- <td>
- <p>UK<br>
- 256
+<td>24.1.1
- <td>
- <p align="justify">24.1.5
+<td>3
- <td>
- <p align="justify">3, 4, 5
+<td>Te
- <td>
- <p align="justify">Te
+<td>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.
+
+<td>Move declaration of postincrement operator
+and postincrement_result type from Interator concept to the
+ForwardIterator concept
- <td>
- <p align="left">The relationship between pre- and post-
- decrement should be expressed as an axiom.
+<td>Alisdair will open an issue.<br>
- <td>
- <p align="left">Move the text
- specification of pre/post-conditions and behaviour into an
- axiom within the BidirectionalIterator concept
+
- <p align="left"><br>
+<tr valign="top">
+<td><p align="justify" style=
+"margin-right: -0.18in; margin-bottom: 0in">UK252
- <td>
- <p align="left">deferred until we know whether we have axioms.<br>
+<p>
- <tr valign="top">
- <td>
- <p>UK<br>
- 257
+<td>24.1.2
- <td>
- <p align="justify">24.1.5
+<td>3
- <td>
- <p align="justify"><br>
+<td>Ed
- <td>
- <p align="justify">Te
+<td>istream_iterator is not a class, but a
+class template
- <td>
- <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
+<td>Change 'class' to 'class template' in the
+note.
- <p align="left"><br>
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">Add the default : typename
- postincrement_result = X;
+
- <td>
- <p align="left">NAD, postdecrement_result is deduced.<br>
+<tr valign="top">
+<td>UK253
- <tr valign="top">
- <td>
- <p>UK<br>
- 258
+<td>24.1.3
- <td>
- <p align="justify">24.1.5
+<td>1
- <td>
- <p align="justify"><br>
+<td>Ed
- <td>
- <p align="justify">Te
+<td>First sentance
+does not make gramatical sense, Seems to be missing the
+words 'if it' by comparison with similar sentance in other
+subsections
- <td>
- <p align="left">A default
- implementation should be supplied for the post-decrement
- operator to simplify implementation of iterators by users.
+<td>Add the words 'if it' : "X satisfies the
+requirements of an output iterator IF IT meets the
+syntactic and semantic requirements"
- <p align="left"><br>
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">Copy the Effects clause into the concept
- description as the default implementation. Assumes a
- default value for postincrement_result
+
- <td>
- <p align="left">Howard will open an issue.<br>
+<tr valign="top">
+<td>UK254
- <tr valign="top">
- <td>
- <p>UK<br>
- 259
+<td>24.1.3
- <td>
- <p align="justify">24.1.5
+<td>5
- <td>
- <p align="justify"><br>
+<td>Te
- <td>
- <p align="justify">Te
+<td>This
+postcondition for pre-increment operator should be written
+as an axiom
- <td>
- <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
+<td>Move the postcondition into the concept
+definition as an axiom
- <p align="left"><br>
+<td>deferred until we know whether we have axioms.<br>
- <td>
- <p align="left">Add the requirement: requires Iterator<
- postdecrement_result >;
+
- <td>
- <p align="left">NAD unless Alisdair comes back with more motivation.<br>
+<tr valign="top">
+<td>UK255
- <tr valign="top">
- <td>
- <p>UK<br>
- 260
+<td>24.1.4
- <td>
- <p align="justify">24.1.5
+<td>4
- <td>
- <p align="justify">6
+<td>Te
- <td>
- <p align="justify">Te
+<td>This
+postcondition for pre-increment operator should be written
+as an axiom
- <td>
- <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>Move the postcondition into the concept
+definition as an axiom
- <td>
- <p align="left">Move the Effects
- clause into the BidirectionalIterator concept definition as
- an axiom, and as the default implementation for the
- operation.
+<td>deferred until we know whether we have axioms.<br>
- <p align="left"><br>
+
- <td>
- <p align="left">deferred for axiom decision.<br>
+<tr valign="top">
+<td>UK256
- <tr valign="top">
- <td>
- <p>UK<br>
- 249
+<td>24.1.5
- <td>
- <p align="justify"><span lang=
- "en-US">24.1.6</span>
+<td>3, 4, 5
- <td>
- <p align="justify">2
+<td>Te
- <td>
- <p align="justify">Te
+<td>The relationship between pre- and post-
+decrement should be expressed as an axiom.
- <td>
- <p align="left">The semantic for
- operator+= should also be provided as a default
- implementation to simplify implementation of user-defined
- iterators
+<td>Move the text
+specification of pre/post-conditions and behaviour into an
+axiom within the BidirectionalIterator concept
- <p align="left"><br>
+<td>deferred until we know whether we have axioms.<br>
- <td>
- <p align="left">Copy the text from the effects clause into
- the RandomAccessIterator concept as the default
- implementaiton.
+
- <td>
- <p align="left">NAD, violates complexity requirements.<br>
+<tr valign="top">
+<td>UK257
- <tr valign="top">
- <td>
- <p>UK<br>
- 261
+<td>24.1.5
- <td>
- <p align="justify">24.1.6
+<td>
- <td>
- <p align="justify"><br>
+<td>Te
- <td>
- <p align="justify">Te
+<td>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
- <td>
- <p align="left">To simplify user
- defined random access iterator types, the
- subscript_reference type should default to reference
+<td>Add the default : typename
+postincrement_result = X;
- <p align="left"><br>
+<td>NAD, postdecrement_result is deduced.<br>
- <td>
- <p align="left">typename subscript_reference = reference;
+
- <td>
- <p align="left">NAD, subscript reference isnt used.<p align="left">In
- c++std-lib-23104, <span class="gI">
- <span email="daniel.kruegler_at_[hidden]" class="gD">Daniel Krügler
- commented,</span><span email="daniel.kruegler_at_[hidden]" class="gD" style="color: rgb(0, 104, 28);">
- </span></span>this [proposed change] would disable "auto-deduction" of
- the return type of any operator[]as described by [concept.map.assoc]/4+5.<tr valign="top">
- <td>
- <p>UK<br>
- 262
+<tr valign="top">
+<td>UK258
- <td>
- <p align="justify">24.1.6
+<td>24.1.5
- <td>
- <p align="justify">3, 4
+<td>
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <p align="left">Effects and post-conditions for operator+
- are more useful if expressed as axioms, and supplied as
- default implementations.
+<td>A default
+implementation should be supplied for the post-decrement
+operator to simplify implementation of iterators by users.
- <td>
- <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.
+<td>Copy the Effects clause into the concept
+description as the default implementation. Assumes a
+default value for postincrement_result
- <p align="left"><br>
+<td>Howard will open an issue.<br>
- <td>
- <p align="left">default implementation already in Standard; axiom part
- deferred.<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 263
+<tr valign="top">
+<td>UK259
- <td>
- <p align="justify">24.1.6
+<td>24.1.5
- <td>
- <p align="justify">5
+<td>
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <p align="left">This requirement on operator-= would be
- better expressed as a default implementation in the
- concept, with a matching axiom
+<td>
+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
- <td>
- <p align="left">Move the
- specification for operator-= from the returns clause into
- an axiom and default implementation within the
- RandomAccessIterator concept
+<td>Add the requirement: requires Iterator<
+postdecrement_result >;
- <p align="left"><br>
+<td>NAD unless Alisdair comes back with more motivation.<br>
- <td>
- <p align="left">Alisdair will open an issue, axiom part deferred.<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 264
+<tr valign="top">
+<td>UK260
- <td>
- <p align="justify">24.1.6
+<td>24.1.5
- <td>
- <p align="justify">6
+<td>6
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <p align="left">Effects clauses are better expressed as
- axioms where possible.
+<td>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>
- <p align="left">Move code in
- operator- effects clause into RandomAccessIterator concept
- as both a default implementation and an axiom
+<td>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>deferred for axiom decision.<br>
- <td>
- <p align="left">deferred/axiom.<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 265
+<tr valign="top">
+<td>UK249
- <td>
- <p align="justify">24.1.6
+<td><span lang=
+"en-US">24.1.6</span>
- <td>
- <p align="justify">8
+<td>2
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <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
+<td>The semantic for
+operator+= should also be provided as a default
+implementation to simplify implementation of user-defined
+iterators
- <p align="left"><br>
+<td>Copy the text from the effects clause into
+the RandomAccessIterator concept as the default
+implementaiton.
- <td>
- <p align="left">Strike the Effects clause
+<td>NAD, violates complexity requirements.<br>
- <td>
- <p align="left">Doug will open issue
strike effect, returns n.<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 266
+<tr valign="top">
+<td>UK261
- <td>
- <p align="justify">24.1.6
+<td>24.1.6
- <td>
- <p align="justify">9
+<td>
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <p align="left">This sentance should be provided as a
- default definition, along with a matching axiom
+<td>To simplify user
+defined random access iterator types, the
+subscript_reference type should default to reference
- <td>
- <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.
+<td>typename subscript_reference = reference;
- <p align="left"><br>
+<td>NAD, subscript reference isnt used.<p>In
+c++std-lib-23104, <span class="gI">
+<span email="daniel.kruegler_at_[hidden]" class="gD">Daniel Krügler
+commented,</span><span email="daniel.kruegler_at_[hidden]" class="gD" style="color: rgb(0, 104, 28);">
+</span></span>this [proposed change] would disable "auto-deduction" of
+the return type of any operator[]as described by [concept.map.assoc]/4+5.
- <td>
- <p align="left">default definition is not implementable; axiom part
- deferred.<br>
+<tr valign="top">
+<td>UK262
- <tr valign="top">
- <td>
- <p>UK<br>
- 267
+<td>24.1.6
- <td>
- <p align="justify">24.1.6
+<td>3, 4
- <td>
- <p align="justify">24.1.6
+<td>Te
- <td>
- <p align="justify">Te
+<td>Effects and post-conditions for operator+
+are more useful if expressed as axioms, and supplied as
+default implementations.
- <td>
- <p align="left">The code in the
- Requires clause for RandomAccessIterator operator[] would
- be better expressed as an axiom.
+<td>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>default implementation already in Standard; axiom part
+deferred.<br>
- <td>
- <p align="left">Rewrite the Requires clause as an axiom in
- the RandomAccessIterator concept
+
- <td>
- <p align="left">deferred/axiom.<br>
+<tr valign="top">
+<td>UK263
- <tr valign="top">
- <td>
- <p>UK<br>
- 268
+<td>24.1.6
- <td>
- <p align="justify">24.1.6
+<td>5
- <td>
- <p align="justify">12
+<td>Te
- <td>
- <p align="justify">Ed
+<td>This requirement on operator-= would be
+better expressed as a default implementation in the
+concept, with a matching axiom
- <td>
- <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.
+<td>Move the
+specification for operator-= from the returns clause into
+an axiom and default implementation within the
+RandomAccessIterator concept
- <p align="left"><br>
+<td>Alisdair will open an issue, axiom part deferred.<br>
- <td>
- <p align="left">Clean up the note to either avoid using
- language extension, or spell out this is a constraint to
- support extensions.
+
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<tr valign="top">
+<td>UK264
- <tr valign="top">
- <td>
- <p>JP 60
+<td>24.1.6
- <td>
- <p align="left">24.1.8
+<td>6
- <td>
- <p align="left">1<sup>st</sup> <font size="2"
- style="font-size: 11pt">para</font>
+<td>Te
- <td>
- <p>te
+<td>Effects clauses are better expressed as
+axioms where possible.
- <td>
- <p align="left">
- Capability of an iterator is too much restricted by
- concept.
+<td>Move code in
+operator- effects clause into RandomAccessIterator concept
+as both a default implementation and an axiom
- <p align="left">
- <br>
+<td>deferred/axiom.<br>
- <p align="left">
- Concept of std::Range is defined as:
+
- <p align="left">
- <br>
+<tr valign="top">
+<td>UK265
- <p align="left">
- concept Range<typename T> {
+<td>24.1.6
- <p align="left">
- InputIterator iterator;
+<td>8
- <p align="left">
- iterator begin(T&);
+<td>Te
- <p align="left">
- iterator end(T&);
+<td>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">}
+<td>Strike the Effects clause
- <p align="left">
- <br>
+<td>Doug will open issue
strike effect, returns n.<br>
- <p align="left">So
- the following code generates an error.
+
- <p align="left">
- <br>
+<tr valign="top">
+<td>UK266
- <p align="left">
- template <std::Range Rng>
+<td>24.1.6
- <p align="left">
- void sort(Rng& r)
+<td>9
- <p align="left">{
+<td>Te
- <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
+<td>This sentance should be provided as a
+default definition, along with a matching axiom
- <p align="left" style=
- "margin-left: 0.07in; text-indent: 0.08in; margin-bottom: 0in">
- // access iterator.
+<td>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">
- std::sort(begin(r), end(r));
+<td>default definition is not implementable; axiom part
+deferred.<br>
- <p align="left">}
+
- <p align="left">
- <br>
+<tr valign="top">
+<td>UK267
- <p align="left">
- std::vector<int> v; // vector::iterator is a random
- access iterator.
+<td>24.1.6
- <p align="left">
- sort(v);
+<td>24.1.6
- <p align="left">
- <br>
+<td>Te
- <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.
+<td>The code in the
+Requires clause for RandomAccessIterator operator[] would
+be better expressed as an axiom.
- <p align="left">
- <br>
+<td>Rewrite the Requires clause as an axiom in
+the RandomAccessIterator concept
- <p align="left">To
- be able to work the above code, we need to write as
- follows:
+<td>deferred/axiom.<br>
- <p align="left">
- <br>
+
- <p align="left">
- template <std::Range T>
+<tr valign="top">
+<td>UK268
- <p align="left">
- requires std::RandomAccessIterator<T::iterator>
- &&
+<td>24.1.6
- <p align="left">
- std::ShuffleIterator<T::iterator> &&
+<td>12
- <p align="left">
- std::LessThanComparable<T::iterator::value_type>
+<td>Ed
- <p align="left">
- void sort(T& r)
+<td>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">{
+<td>Clean up the note to either avoid using
+language extension, or spell out this is a constraint to
+support extensions.
- <p align="left">
- sort(begin(r), end(r));
+<td>[Being reviewed by Editor]<br>
- <p align="left">}
+
- <p align="left">
- <br>
+<tr valign="top">
+<td>JP60
- <p align="left">
- std::vector<int> v;
+<td>24.1.8
- <p align="left">
- sort(v);
+<td>1<sup>st</sup> <font size="2"
+style="font-size: 11pt">para</font>
- <p align="left">
- <br>
+<td>te
- <p align="left">It
- needs quiet a few amount of codes like this only to recover
- random access capability from InputIterator concept.
+<td>
+Capability of an iterator is too much restricted by
+concept.
- <p align="left">
- <br>
+<p>
+<br>
- <p align="left">We
- can write the following valid code with Boost.Range, which
- is implemented with using C++03 SFINAE.
+<p>
+Concept of std::Range is defined as:
- <p align="left">
- <br>
+<p>
+<br>
- <p align="left">
- template <class Range>
+<p>
+concept Range<typename T> {
- <p align="left">
- void sort(Range& r)
+<p>
+InputIterator iterator;
- <p align="left">{
+<p>
+iterator begin(T&);
- <p align="left">
- std::sort(boost::begin(r), boost::end(r));
+<p>
+iterator end(T&);
- <p align="left">}
+<p>}
- <p align="left">
- <br>
+<p>
+<br>
- <p align="left">
- std::vector<int> v;
+<p>So
+the following code generates an error.
- <p align="left">
- sort(v); // OK
+<p>
+<br>
- <p align="left">
- <br>
+<p>
+template <std::Range Rng>
- <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>
+void sort(Rng& r)
- <p align="left" style="margin-top: 0.04in">
- <br>
+<p>{
- <td>
- <p align="left" style="margin-top: 0.04in">Add
- InputRange, OutputRange, ForwardRange, BidirectionalRange
- and RandomAccessRange.
+<p style=
+"margin-left: 0.08in; text-indent: -0.08in; margin-bottom: 0in">
+// error! Rng::iterator does not satisfy requirements of a
+random
- <td>
- <p align="left">NAD, beyond the scope of the Standard because we are not
- supplying range-based algorithms.<br>
+<p style=
+"margin-left: 0.07in; text-indent: 0.08in; margin-bottom: 0in">
+// access iterator.
- <tr valign="top">
- <td>
- <p>UK<br>
- 269
+<p>
+std::sort(begin(r), end(r));
- <td>
- <p align="justify">24.3
+<p>}
- <td>
- <p align="justify">3
+<p>
+<br>
- <td>
- <p align="justify">Ed
+<p>
+std::vector<int> v; // vector::iterator is a random
+access iterator.
- <td>
- <p align="left">'decrements for
- negative n' seems to imply a negative number of decrement
- operations, which is odd.
+<p>
+sort(v);
- <p align="left"><br>
+<p>
+<br>
- <td>
- <p align="left">Need simple, clearer wording
+<p>
+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.
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<p>
+<br>
- <tr valign="top">
- <td>
- <p>UK<br>
- 270
+<p>To
+be able to work the above code, we need to write as
+follows:
- <td>
- <p align="justify">24.3
+<p>
+<br>
- <td>
- <p align="justify">4
+<p>
+template <std::Range T>
- <td>
- <p align="justify">Te
+<p>
+requires std::RandomAccessIterator<T::iterator>
+&&
- <td>
- <p align="left">The reachability
- constraint in p5 means that a negavite result, implying
- decrements operations in p4, is not possible
+<p>
+std::ShuffleIterator<T::iterator> &&
- <p align="left"><br>
+<p>
+std::LessThanComparable<T::iterator::value_type>
- <td>
- <p align="left">Split the two overloads into separate
- descriptions, where reachability is permitted to be in
- either direction for RandomAccessIterator
+<p>
+void sort(T& r)
- <td>
- <p align="left">Howard will open an issue.<br>
+<p>{
- <tr valign="top">
- <td>
- <p>UK<br>
- 271
+<p>
+sort(begin(r), end(r));
- <td>
- <p align="justify">24.3
+<p>}
- <td>
- <p align="justify">6,7
+<p>
+<br>
- <td>
- <p align="justify">Te
+<p>
+std::vector<int> v;
- <td>
- <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>
+sort(v);
- <p align="left"><br>
+<p>
+<br>
- <td>
- <p align="left">Replace InputIterator constraint with
- FOrwardIterator in next and prev function templates.
+<p>It
+needs quiet a few amount of codes like this only to recover
+random access capability from InputIterator concept.
- <td>
- <p align="left">Alisdair will open an issue.<br>
+<p>
+<br>
- <tr valign="top">
- <td>
- <p>UK<br>
- 272
+<p>We
+can write the following valid code with Boost.Range, which
+is implemented with using C++03 SFINAE.
- <td>
- <p align="justify">24.4
+<p>
+<br>
- <td>
- <p align="justify"><br>
+<p>
+template <class Range>
- <td>
- <p align="justify">Te
+<p>
+void sort(Range& r)
- <td>
- <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>{
- <p align="left"><br>
+<p>
+std::sort(boost::begin(r), boost::end(r));
- <td>
- <p align="left">Rephrase the reverse_iterator comparison
- operations using only operators < and ==, as per the
- move_iterator specification.
+<p>}
- <td>
- <p align="left">NAD, no consensus.<br>
+<p>
+<br>
- <tr valign="top">
- <td>
- <p>UK<br>
- 274
+<p>
+std::vector<int> v;
- <td>
- <p align="justify">24.4, 24.5
+<p>
+sort(v); // OK
- <td>
- <p align="justify"><br>
+<p>
+<br>
- <td>
- <p align="justify">Ed
+<p>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.
- <td>
- <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>
+<br>
- <p align="left"><br>
+<td>Add
+InputRange, OutputRange, ForwardRange, BidirectionalRange
+and RandomAccessRange.
- <td>
- <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>NAD, beyond the scope of the Standard because we are not
+supplying range-based algorithms.<br>
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 275
+<tr valign="top">
+<td>UK269
- <td>
- <p align="justify">24.4.1.1
+<td>24.3
- <td>
- <p align="justify"><br>
+<td>3
- <td>
- <p align="justify">Te
+<td>Ed
- <td>
- <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.
+<td>'decrements for
+negative n' seems to imply a negative number of decrement
+operations, which is odd.
- <p align="left"><br>
+<td>Need simple, clearer wording
- <td>
- <p align="left">The reverse_iterator template constructor
- taking a single Iterator argument should be explicit.
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">NAD, withdrawn by submitter.<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 276
+<tr valign="top">
+<td>UK270
- <td>
- <p align="justify">24.4.1.1
+<td>24.3
- <td>
- <p align="justify"><br>
+<td>4
- <td>
- <p align="justify">Ed
+<td>Te
- <td>
- <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.
+<td>The reachability
+constraint in p5 means that a negavite result, implying
+decrements operations in p4, is not possible
- <p align="left"><br>
+<td>Split the two overloads into separate
+descriptions, where reachability is permitted to be in
+either direction for RandomAccessIterator
- <td>
- <p align="left">Make the member operators taking a
- difference_type argument non-member operators
+<td>Howard will open an issue.<br>
- <td>
- <p align="left">NAD, not editorial, withdrawn by submitter.<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 277
+<tr valign="top">
+<td>UK271
- <td>
- <p align="justify">24.4.1.2.1
+<td>24.3
- <td>
- <p align="justify">1
+<td>6,7
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <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.
+<td>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>Replace InputIterator constraint with
+FOrwardIterator in next and prev function templates.
- <td>
- <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>Alisdair will open an issue.<br>
- <td>
- <p align="left">agree with option i, Alisdair will open an issue.<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 278
+<tr valign="top">
+<td>UK272
- <td>
- <p align="justify">24.4.1.2.1
+<td>24.4
- <td>
- <p align="justify">3
+<td>
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <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.
+<td>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.
+
+<td>Rephrase the reverse_iterator comparison
+operations using only operators < and ==, as per the
+move_iterator specification.
- <p align="left"><br>
+<td>NAD, no consensus.<br>
- <td>
- <p align="left">Change the const reverse_iterator<U>
- & parameter to pass-by-value
+
- <td>
- <p align="left">NAD, we dont believe that copy elision is a
- sufficiently high priority for iterator types.<br>
+<tr valign="top">
+<td>UK274
- <tr valign="top">
- <td>
- <p>UK<br>
- 279
+<td>24.4, 24.5
- <td>
- <p align="justify">24.4.1.<br>
- 2.12,<br>
- 24.4.3.<br>
- 2.12
+<td>
- <td>
- <p align="justify"><br>
+<td>Ed
- <td>
- <p align="justify">Te
+<td>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
+
+<td>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>
- <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.
+<td>[Being reviewed by Editor]<br>
- <p align="left"><br>
+
- <td>
- <p align="left">Specify the return type using either
- decltype or the Iter concept map
+<tr valign="top">
+<td>UK275
- <td>
- <p align="left">under discussion. This is a general question about all
- iterator adapters.<br>
+<td>24.4.1.1
- <tr valign="top">
- <td>
- <p>UK<br>
- 280
+<td>
- <td>
- <p align="justify">24.4.1.<br>
- 2.4
+<td>Te
- <td>
- <p align="justify"><br>
+<td>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.
- <td>
- <p align="justify">Ed
+<td>The reverse_iterator template constructor
+taking a single Iterator argument should be explicit.
- <td>
- <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.
+<td>NAD, withdrawn by submitter.<br>
- <p align="left"><br>
+
- <td>
- <p align="left">Add reverse_iterator expsoition only member
- tmp as a comment to class declaration, as a private member
+<tr valign="top">
+<td>UK276
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<td>24.4.1.1
- <tr valign="top">
- <td>
- <p>UK<br>
- 281
+<td>
- <td>
- <p align="justify">24.4.1.<br>
- 2.5
+<td>Ed
- <td>
- <p align="justify"><br>
+<td>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.
- <td>
- <p align="justify">Te
+<td>Make the member operators taking a
+difference_type argument non-member operators
- <td>
- <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'
+<td>NAD, not editorial, withdrawn by submitter.<br>
- <p align="left"><br>
+
- <td>
- <p align="left">Replace the existing returns specification
- with a copy of the operator* specification that returns
- this->tmp.operator->
+<tr valign="top">
+<td>UK277
- <td>
- <p align="left">study group formed to come up with a suggested
- resolution.<br>
+<td>24.4.1.2.1
- <tr valign="top">
- <td>
- <p>UK<br>
- 282
+<td>1
- <td>
- <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>Te
- <td>
- <p align="justify">n/a
+<td>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.
+
+<td>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>
- <p align="justify">Te
+<td>agree with option i, Alisdair will open an issue.<br>
- <td>
- <p align="left">Insert iterators of move-only types will
- move from lvalues
+
- <td>
- <p align="left">Add an additional constrained overload for
- operator= that requires
- !CopyConstructible<Cont::value_type> and mark it
- =delete.
+<tr valign="top">
+<td>UK278
- <td>
- <p align="left">deferred to discussion of N2831.<br>
+<td>24.4.1.2.1
- <tr valign="top">
- <td>
- <p>UK<br>
- 283
+<td>3
- <td>
- <p align="justify">24.4.2.5,<br>
- 24.4.2.6.4
+<td>Te
- <td>
- <p align="justify"><br>
+<td>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.
- <td>
- <p align="justify">Te
+<td>Change the const reverse_iterator<U>
+& parameter to pass-by-value
- <td>
- <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>NAD, we dont believe that copy elision is a
+sufficiently high priority for iterator types.<br>
- <td>
- <p align="left">change operator++(int) overload to return
- by value, not reference. Affects both class summary and
- operator definition in p
+
- <td>
- <p align="left">NAD. This is compatible with C++03; and we lack a
- consensus for change.<br>
+<tr valign="top">
+<td>UK279
- <tr valign="top">
- <td>
- <p>JP 61
+<td>24.4.1.<br>
+2.12,<br>
+24.4.3.<br>
+2.12
- <td>
- <p align="left">24.4.3.2.1
+<td>
- <td>
- <p align="left">2<sup>nd</sup> <font size="2"
- style="font-size: 11pt">para, 1<sup>st</sup>
- line</font>
+<td>Te
- <td>
- <p>ed
+<td>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.
- <td>
- <p align="left">
- Typo.
+<td>Specify the return type using either
+decltype or the Iter concept map
- <p align="left" style="margin-top: 0.04in">
- "intializing" should be "in<u>i</u>tializing"
+<td>under discussion. This is a general question about all
+iterator adapters.<br>
- <td>
- <p align="left" style="margin-top: 0.04in">Add
- "i"
+
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<tr valign="top">
+<td>UK280
- <tr valign="top">
- <td>
- <p>UK<br>
- 284
+<td>24.4.1.<br>
+2.4
- <td>
- <p align="justify">24.5
+<td>
- <td>
- <p align="justify"><br>
+<td>Ed
- <td>
- <p align="justify">Te
+<td>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.
- <td>
- <p align="left">The stream
- iterators need constraining with concepts/requrires
- clauses.
+<td>Add reverse_iterator expsoition only member
+tmp as a comment to class declaration, as a private member
- <p align="left"><br>
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">Provide constraints
+
- <td>
- <p align="left">We agree. To be handled by Howard, Martin and PJ.<br>
+<tr valign="top">
+<td>UK281
- <tr valign="top">
- <td>
- <p>UK<br>
- 285
+<td>24.4.1.<br>
+2.5
- <td>
- <p align="justify">24.5.1
+<td>
- <td>
- <p align="justify">1,2
+<td>Te
- <td>
- <p align="justify">Ed
+<td>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'
- <td>
- <p align="left">Much of the
- content of p1 and the whole of p2 is a redundant
- redefinition of InputIterator. It should be simplified
+<td>Replace the existing returns specification
+with a copy of the operator* specification that returns
+this->tmp.operator->
- <p align="left"><br>
+<td>study group formed to come up with a suggested
+resolution.<br>
- <td>
- <p align="left">Strike p2. Simplify p1 and add a
- cross-reference to the definition of InputIterator concept.
+
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<tr valign="top">
+<td>UK282
- <tr valign="top">
- <td>
- <p>UK<br>
- 286
+<td>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>
- <p align="justify">24.5.1
+<td>n/a
- <td>
- <p align="justify">3
+<td>Te
- <td>
- <p align="justify">Ed
+<td>Insert iterators of move-only types will
+move from lvalues
- <td>
- <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.
+<td>Add an additional constrained overload for
+operator= that requires
+!CopyConstructible<Cont::value_type> and mark it
+=delete.
- <p align="left"><br>
+<td>deferred to discussion of N2831.<br>
- <td>
- <p align="left">Either provide a similar definition to the
- copy-assign operator as for the copy constructor, or strike
- the copy constructor
+
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<tr valign="top">
+<td>UK283
- <tr valign="top">
- <td>
- <p>UK<br>
- 287
+<td>24.4.2.5,<br>
+24.4.2.6.4
- <td>
- <p align="justify">24.5.1.1
+<td>
- <td>
- <p align="justify">2
+<td>Te
- <td>
- <p align="justify">Te
+<td>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>
- <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?
+<td>change operator++(int) overload to return
+by value, not reference. Affects both class summary and
+operator definition in p
- <p align="left"><br>
+<td>NAD. This is compatible with C++03; and we lack a
+consensus for change.<br>
- <td>
- <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>
- <p align="left">Martin will address with existing LWG
- issue 788.<br>
+<tr valign="top">
+<td>JP61
- <tr valign="top">
- <td>
- <p>UK<br>
- 288
+<td>24.4.3.2.1
- <td>
- <p align="justify">24.5.1.1
+<td>2<sup>nd</sup> <font size="2"
+style="font-size: 11pt">para, 1<sup>st</sup>
+line</font>
- <td>
- <p align="justify">3
+<td>ed
- <td>
- <p align="justify">Ed
+<td>
+Typo.
- <td>
- <p align="left">The provided specification is vacuous,
- offering no useful information.
+<p>
+"intializing" should be "in<u>i</u>tializing"
- <td>
- <p align="left">Either strike
- the specification of the copy constructor, or simply
- replace it with an = default definition.
+<td>Add
+"i"
- <p align="left"><br>
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 289
+<tr valign="top">
+<td>UK284
- <td>
- <p align="justify">24.5.1.2
+<td>24.5
- <td>
- <p align="justify">6
+<td>
- <td>
- <p align="justify">Ed
+<td>Te
- <td>
- <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.
+<td>The stream
+iterators need constraining with concepts/requrires
+clauses.
- <p align="left"><br>
+<td>Provide constraints
- <td>
- <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>We agree. To be handled by Howard, Martin and PJ.<br>
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 290
+<tr valign="top">
+<td>UK285
- <td>
- <p align="justify">24.5.2
+<td>24.5.1
- <td>
- <p align="justify">1
+<td>1,2
- <td>
- <p align="justify">Te
+<td>Ed
- <td>
- <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.
+<td>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>Strike p2. Simplify p1 and add a
+cross-reference to the definition of InputIterator concept.
- <td>
- <p align="left">Replace char * with const charT *
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">We agree and believe it to be editorial.<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 291
+<tr valign="top">
+<td>UK286
- <td>
- <p align="justify">24.5.2.2
+<td>24.5.1
- <td>
- <p align="justify">2
+<td>3
- <td>
- <p align="justify">Te
+<td>Ed
- <td>
- <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.
+<td>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>Either provide a similar definition to the
+copy-assign operator as for the copy constructor, or strike
+the copy constructor
- <td>
- <p align="left">ostream_iterator operator++(int);
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">NAD. This is compatible with C++03; and we lack a
- consensus for change.<br>
+
- <tr valign="top">
- <td>
- <p>FR 34
+<tr valign="top">
+<td>UK287
- <td>
- <p>24.5.3<br>
- [istream-<br>
- buf.<br>
- iterator]
+<td>24.5.1.1
- <td>
- <p>
+<td>2
- <td>
- <p>ed
+<td>Te
- <td>
- <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.
+<td>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?
+
+<td>Specify _value_ is initialized by reading
+the stream, or the iterator takes on the end-of-stream
+value if the stream is empty
- <p>
+<td>Martin will address with existing LWG
+issue 788.<br>
- <td>
- <p align="left"><br>
+
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<tr valign="top">
+<td>UK288
- <tr valign="top">
- <td>
- <p>UK<br>
- 292
+<td>24.5.1.1
- <td>
- <p align="justify">24.5.3
+<td>3
- <td>
- <p align="justify">1
+<td>Ed
- <td>
- <p align="justify">Ed
+<td>The provided specification is vacuous,
+offering no useful information.
- <td>
- <p align="left">Prefer the use
- of the new nullptr constant to the zero literal when using
- a null pointer in text.
+<td>Either strike
+the specification of the copy constructor, or simply
+replace it with an = default definition.
- <p align="left"><br>
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">Change istreambuf_iterator(0) to
- istreambuf_iterator(nullptr)
+
+
+<tr valign="top">
+<td>UK289
+
+<td>24.5.1.2
+
+<td>6
+
+<td>Ed
+
+<td>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.
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<td>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.
- <tr valign="top">
- <td>
- <p>UK<br>
- 293
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="justify">24.5.3
+
- <td>
- <p align="justify">2,3,4
+<tr valign="top">
+<td>UK290
- <td>
- <p align="justify">Ed
+<td>24.5.2
- <td>
- <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>1
- <td>
- <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.
+<td>Te
- <p align="left"><br>
+<td>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.
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<td>Replace char * with const charT *
- <tr valign="top">
- <td>
- <p>UK<br>
- 294
+<td>We agree and believe it to be editorial.<br>
- <td>
- <p align="justify">24.5.3.2
+
- <td>
- <p align="justify">2
+<tr valign="top">
+<td>UK291
- <td>
- <p align="justify">Te
+<td>24.5.2.2
- <td>
- <p align="left">Implicit converting constructors can be
- invoked at surprising times, so there should always be a
- good reason for declaring one.
+<td>2
- <td>
- <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();
+<td>Te
- <p align="left"><br>
+<td>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.
- <td>
- <p align="left">NAD. This could potentially [break] C++03-conforming
- programs.<br>
+<td>ostream_iterator operator++(int);
- <tr valign="top">
- <td>
- <p>UK<br>
- 295
+<td>NAD. This is compatible with C++03; and we lack a
+consensus for change.<br>
- <td>
- <p align="justify">25
+
- <td>
- <p align="justify"><br>
+<tr valign="top">
+<td>FR34
- <td>
- <p align="justify">Te
+<td>24.5.3<br>
+[istream-<br>
+buf.<br>
+iterator]
- <td>
- <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.
+<td>
- <p align="left"><br>
+<td>ed
- <td>
- <p align="left">Adopt n2743, or an update of that paper.
+<td>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.
- <td>
- <p align="left">NAD, this change would break code that takes the address
- of an algorithm.<br>
+<p>
- <tr valign="top">
- <td>
- <p>JP 62
+<td>
- <td>
- <p align="left">25, 25.3.1.5,<br>
- 26.3.6.5
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left"><br>
+
- <td>
- <p>te
+<tr valign="top">
+<td>UK292
- <td>
- <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.
+<td>24.5.3
- <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.
+<td>1
- <p align="left" style=
- "text-indent: 0.2in; margin-top: 0.04in"><br>
+<td>Ed
- <td>
- <p align="left">
- Change "is_sorted_until" to "sorted_bound"
+<td>Prefer the use
+of the new nullptr constant to the zero literal when using
+a null pointer in text.
- <p align="left" style="margin-top: 0.04in">
- Change "is_heap" to "heap_bound"
+<td>Change istreambuf_iterator(0) to
+istreambuf_iterator(nullptr)
- <td>
- <p align="left">no consensus to make the change.<br>
+<td>[Being reviewed by Editor]<br>
- <tr valign="top">
- <td>
- <p>UK<br>
- 296
+
- <td>
- <p align="justify">25.1.8
+<tr valign="top">
+<td>UK293
- <td>
- <p align="justify">1
+<td>24.5.3
- <td>
- <p align="justify">Te
+<td>2,3,4
- <td>
- <p align="left">The 'Returns' of
- adjacent_find requires only HasEqualTo, or a Predicate.
- Requiring EqualityComparable or EquivalenceRelation seems
- too strong and not useful.
+<td>Ed
- <p align="left"><br>
+<td>The listed paragraphs redundantly redefine
+an input iterator, and redundancy can be a dangerous thing
+in a specification. Suggest a simpler phrasing below.
+
+<td>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.
- <td>
- <p align="left">Change EqualityComparable to HasEqualTo and
- EquivalnceRelation to Predicate
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">no consensus to make the change.<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 297
+<tr valign="top">
+<td>UK294
- <td>
- <p align="justify">25.2.11
+<td>24.5.3.2
- <td>
- <p align="justify">6
+<td>2
- <td>
- <p align="justify">Ed
+<td>Te
- <td>
- <p align="left">The definition
- of rotate_copy is very complicated. It is equivalent to:
- return copy(first, middle, copy(middle, last, result));
+<td>Implicit converting constructors can be
+invoked at surprising times, so there should always be a
+good reason for declaring one.
+
+<td>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>NAD. This could potentially [break] C++03-conforming
+programs.<br>
- <td>
- <p align="left">Change 'effects' to, returns, requires,
- complexity to: effects: equivalent to: return copy(first,
- middle, copy(middle, last, result));
+
- <td>
- <p align="left">Editor requests guidance: we agree that it is editorial.<br>
+<tr valign="top">
+<td>UK295
- <tr valign="top">
- <td>
- <p>UK<br>
- 298
+<td>25
- <td>
- <p align="justify">25.2.13
+<td>
- <td>
- <p align="justify">13
+<td>Te
- <td>
- <p align="justify">Te
+<td>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.
- <td>
- <p align="left">partition_point requires a partitioned
- array
+<td>Adopt n2743, or an update of that paper.
- <td>
- <p align="left">requires: is_partitioned(first, last, pred)
- != false;
+<td>NAD, this change would break code that takes the address
+of an algorithm.<br>
- <td>
- <p align="left">We agree with the suggested change and believe that it
- is editorial.<br>
+
- <tr valign="top">
- <td>
- <p>UK<br>
- 299
+<tr valign="top">
+<td>JP62
- <td>
- <p align="justify">25.2.2
+<td>25, 25.3.1.5,<br>
+26.3.6.5
- <td>
- <p align="justify"><br>
+<td>
- <td>
- <p align="justify">Ed
+<td>te
- <td>
- <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><p 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.
- <td>
- <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);
+<p 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.
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<p style=
+"text-indent: 0.2in; margin-top: 0.04in"><br>
- <tr valign="top">
- <td>
- <p>UK<br>
- 300
+<td>
+Change "is_sorted_until" to "sorted_bound"
- <td>
- <p align="justify">25.2.3
+<p>
+Change "is_heap" to "heap_bound"
- <td>
- <p align="justify"><br>
+<td>no consensus to make the change.<br>
- <td>
- <p align="justify">Te
+
- <td>
- <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.
+<tr valign="top">
+<td>UK296
- <p align="left"><br>
+<td>25.1.8
- <td>
- <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>1
- <td>
- <p align="left">no consensus to make the change.<br>
+<td>Te
- <tr valign="top">
- <td>
- <p>UK<br>
- 301
+<td>The 'Returns' of
+adjacent_find requires only HasEqualTo, or a Predicate.
+Requiring EqualityComparable or EquivalenceRelation seems
+too strong and not useful.
- <td>
- <p align="justify">25.2.5
+<td>Change EqualityComparable to HasEqualTo and
+EquivalnceRelation to Predicate
- <td>
- <p align="justify"><br>
+<td>no consensus to make the change.<br>
- <td>
- <p align="justify">Te
+
- <td>
- <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&>
+<tr valign="top">
+<td>UK297
- <p align="left"><br>
+<td>25.2.11
- <td>
- <p align="left">Remove OutputIterator<Iter,
- Iter::reference> from replace and replace_if
+<td>6
- <td>
- <p align="left">agreed. Howard will open an issue.<br>
+<td>Ed
- <tr valign="top">
- <td>
- <p>UK<br>
- 302
+<td>The definition
+of rotate_copy is very complicated. It is equivalent to:
+return copy(first, middle, copy(middle, last, result));
- <td>
- <p align="justify">25.3
+<td>Change 'effects' to, returns, requires,
+complexity to: effects: equivalent to: return copy(first,
+middle, copy(middle, last, result));
- <td>
- <p align="justify">4
+<td>Editor requests guidance: we agree that it is editorial.<br>
- <td>
- <p align="justify">Ed
+
- <td>
- <p align="left">the concept
- StrictWeakOrder covers the definition of a strict weak
- ordering, described in paragraph 4.
+<tr valign="top">
+<td>UK298
- <p align="left"><br>
+<td>25.2.13
- <td>
- <p align="left">Remove 4, and mention StrictWeakOrder in
- paragraph 1.
+<td>13
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<td>Te
- <tr valign="top">
- <td>
- <p>UK<br>
- 303
+<td>partition_point requires a partitioned
+array
- <td>
- <p align="justify">25.3
+<td>requires: is_partitioned(first, last, pred)
+!= false;
- <td>
- <p align="justify">6
+<td>We agree with the suggested change and believe that it
+is editorial.<br>
- <td>
- <p align="justify">Ed
+
- <td>
- <p align="left">This paragraph just describes
- is_partitioned
+<tr valign="top">
+<td>UK299
- <td>
- <p align="left">6 A sequence
- [start,finish) is partitioned with respect to an expression
- f(e) if is_partitioned(start, finish, e) != false
+<td>25.2.2
- <p align="left"><br>
+<td>
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<td>Ed
- <tr valign="top">
- <td>
- <p>UK<br>
- 304
+<td>Should be consistent in style use of
+concepts in template parameter lists. The
+auto-OutputIterator sytle used in std::copy is probably
+preferred.
- <td>
- <p align="justify">25.3.6
+<td>Change way signature is declared:
+template<InputIterator InIter, OutputIterator<auto,
+RvalueOf<InIter::reference>::type> OutIter>
+OutIter move(InIter first, InIter last, OutIter result);
- <td>
- <p align="justify"><br>
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="justify">Ed
+
- <td>
- <p align="left">The requires
- clauses of push_heap, pop_heap and make_heap are
- inconsistently formatted, dispite being identical
+<tr valign="top">
+<td>UK300
- <p align="left"><br>
+<td>25.2.3
- <td>
- <p align="left">Format them identically.
+<td>
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<td>Te
- <tr valign="top">
- <td>
- <p>UK<br>
- 305
+<td>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.
+
+<td>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>
- <p align="justify">25.3.7
+<td>no consensus to make the change.<br>
- <td>
- <p align="justify">1, 9, 17
+
- <td>
- <p align="justify">Te
+<tr valign="top">
+<td>UK301
- <td>
- <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>25.2.5
- <td>
- <p align="left">Strike the !IsSameType<T, Compare>
- constraint on min/max/minmax algorithms
+<td>
- <td>
- <p align="left">agreed. We request that someone from the UK open an
- issue.<br>
+<td>Te
- <tr valign="top">
- <td>
- <p align="left">US 84
+<td>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&>
- <td>
- <p align="left">26
+<td>Remove OutputIterator<Iter,
+Iter::reference> from replace and replace_if
- <td>
- <p align="left"><br>
+<td>agreed. Howard will open an issue.<br>
- <td>
- <p align="left">ge
+
- <td>
- <p align="left">
- Parts of the numerics chapter are not concept enabled.
+<tr valign="top">
+<td>UK302
- <p align="left"><br>
+<td>25.3
- <td>
- <p align="left"><br>
+<td>4
- <td>
- <p align="left">The portions of this comment dealing
- with random numbers are resolved by
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2836.pdf">
- N2836</a>, which was accepted in New Jersey.<br>
+<td>Ed
- <tr valign="top">
- <td>
- <p>FR 35
+<td>the concept
+StrictWeakOrder covers the definition of a strict weak
+ordering, described in paragraph 4.
- <td>
- <p>26.3<br>
- [Complex<br>
- numbers]
+<td>Remove 4, and mention StrictWeakOrder in
+paragraph 1.
- <td>
- <p>
+<td>[Being reviewed by Editor]<br>
- <td>
- <p>te
+
- <td>
- <p>Instantiations of the class
- template complex<> have to be allowed for integral
- types, to reflect existing practice and ISO standards
- (LIA-III).
+<tr valign="top">
+<td>UK303
- <p>
+<td>25.3
- <td>
- <p align="left"><br>
+<td>6
- <td>
- <p align="left"><br>
+<td>Ed
- <tr valign="top">
- <td>
- <p>UK<br>
- 306
+<td>This paragraph just describes
+is_partitioned
- <td>
- <p align="justify">26.4
+<td>6 A sequence
+[start,finish) is partitioned with respect to an expression
+f(e) if is_partitioned(start, finish, e) != false
- <td>
- <p align="justify"><br>
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="justify">Te
+
- <td>
- <p align="left">Random number
- library component cannot be used in constrained templates
+<tr valign="top">
+<td>UK304
- <p align="left"><br>
+<td>25.3.6
- <td>
- <p align="left">Provide constraints for the random number
- library
+<td>
- <td>
- <p align="left">Resolved by
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2836.pdf">
- N2836</a>, which was accepted in New Jersey.<br>
+<td>Ed
- <tr valign="top">
- <td>
- <p>JP 63
+<td>The requires
+clauses of push_heap, pop_heap and make_heap are
+inconsistently formatted, dispite being identical
- <td>
- <p align="left">26.4.8.5.1
+<td>Format them identically.
- <td>
- <p align="left"><br>
+<td>[Being reviewed by Editor]<br>
+
+
+
+<tr valign="top">
+<td>UK305
+
+<td>25.3.7
+
+<td>1, 9, 17
+
+<td>Te
+
+<td>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>Strike the !IsSameType<T, Compare>
+constraint on min/max/minmax algorithms
+
+<td>agreed. We request that someone from the UK open an
+issue.<br>
+
+
+
+<tr valign="top">
+<td>US84
+
+<td>26
+
+<td>
+
+<td>ge
+
+<td>
+Parts of the numerics chapter are not concept enabled.
+
+<td>
+
+<td>The portions of this comment dealing
+with random numbers are resolved by
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2836.pdf">
+N2836</a>, which was accepted in New Jersey.<br>
+
+
+
+<tr valign="top">
+<td>FR35
+
+<td>26.3<br>
+[Complex<br>
+ numbers]
- <td>
- <p>te
+<td>
- <td>
- <p align="left">No
- constructor of discrete_distribution that accepts
- initializer_list.
+<td>te
- <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.
+<td>Instantiations of the class
+template complex<> have to be allowed for integral
+types, to reflect existing practice and ISO standards
+(LIA-III).
- <p align="left">
- <br>
+<p>
- <p align="left">int
- ar[] = {1, 2, 3};
+<td>
- <p align="left">
- discrete_distribution<> dist(ar, ar+3);
+<td>
- <p align="left">
- <br>
+<tr valign="top">
+<td>UK306
- <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.
+<td>26.4
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>
- <td>
- <p align="left">Add
- the following constructer.
+<td>Te
- <p align="left" style="margin-top: 0.04in">
- <u>discrete_distribution(initializer_list<result_type>);</u>
+<td>Random number
+library component cannot be used in constrained templates
- <td>
- <p align="left">Resolved by
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2836.pdf">
- N2836</a>, which was accepted in New Jersey.</p>
- <p align="left">This comment is also covered by
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#874">
- issue 874</a>. [Suggested by <span class="gI">
- <span email="daniel.kruegler_at_[hidden]" class="gD">Daniel Krügler
- and confirmed by the submitter.]</span></span><p align="left"><br>
+<td>Provide constraints for the random number
+library
- <tr valign="top">
- <td>
- <p>JP 64
+<td>Resolved by
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2836.pdf">
+N2836</a>, which was accepted in New Jersey.<br>
- <td>
- <p align="left">26.5.2
+
- <td>
- <p align="left"><br>
+<tr valign="top">
+<td>JP63
- <td>
- <p>te
+<td>26.4.8.5.1
- <td>
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">
- “valarray<T>& operator+=
- (initializer_list<T>);” is not defined.
+<td>
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>te
- <td>
- <p align="left" style="margin-top: 0.04in">Add
- valarray<T>& operator+=
- (initializer_list<T>);
+<td>No
+constructor of discrete_distribution that accepts
+initializer_list.
- <td>
- <p align="left"><br>
+<p>
+discrete_distribution initialize distribution by a given
+range (iterators), but temporary variable of a container or
+an array is needed in the following case.
- <tr valign="top">
- <td>
- <p>UK<br>
- 307
+<p>
+<br>
- <td>
- <p align="justify">26.7
+<p>int
+ar[] = {1, 2, 3};
- <td>
- <p align="justify">Footnote 288
+<p>
+discrete_distribution<> dist(ar, ar+3);
- <td>
- <p align="justify">Ed
+<p>
+<br>
- <td>
- <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>Other libraries
+also accept initializer_list, so change
+discrete_distribution library to accept initializer_list
+too.
- <p align="left"><br>
+<p>
+<br>
- <td>
- <p align="left">Drop the reference to TR1.
+<td>Add
+the following constructer.
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<p>
+<u>discrete_distribution(initializer_list<result_type>);</u>
- <tr valign="top">
- <td>
- <p align="left">US 85
+<td>Resolved by
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2836.pdf">
+N2836</a>, which was accepted in New Jersey.</p>
+<p>This comment is also covered by
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#874">
+issue 874</a>. [Suggested by <span class="gI">
+<span email="daniel.kruegler_at_[hidden]" class="gD">Daniel Krügler
+and confirmed by the submitter.]</span></span><p><br>
- <td>
- <p align="left">27
+
- <td>
- <p align="left"><br>
+<tr valign="top">
+<td>JP64
- <td>
- <p align="left">ge
+<td>26.5.2
- <td>
- <p align="left">The
- input/output chapter is not concept enabled.
+<td>
- <p align="left"><br>
+<td>te
- <td>
- <p align="left"><br>
+<td>
+“valarray<T>& operator+=
+(initializer_list<T>);” is not defined.
- <td>
- <p align="left"><br>
+<p>
+<br>
- <tr valign="top">
- <td>
- <p>UK<br>
- 308
+<td>Add
+valarray<T>& operator+=
+(initializer_list<T>);
- <td>
- <p align="justify">27
+<td>
- <td>
- <p align="justify"><br>
+<tr valign="top">
+<td>UK307
- <td>
- <p align="justify">Te
+<td>26.7
- <td>
- <p align="left">
- <span lang="en-US">iostreams library cannot be used from
- constrained templates</span>
+<td>Footnote 288
- <p align="left"><br>
+<td>Ed
- <td>
- <p align="left">Provide constraints for the iostreams
- library, clause 27
+<td>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.
- <td>
- <p align="left"><br>
+<td>Drop the reference to TR1.
- <tr valign="top">
- <td>
- <p>JP 65
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">27.4.4
+
- <td>
- <p align="left"><br>
+<tr valign="top">
+<td>US85
- <td>
- <p>te
+<td>27
- <td>
- <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”.
+<td>
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>ge
- <td>
- <p align="left" style="margin-top: 0.04in">
- Replace "operator <i>unspecified-bool-type</i>() const;"
- with "explicit operator bool() const;"
+<td>The
+input/output chapter is not concept enabled.
- <td>
- <p align="left"><br>
+<td>
- <tr valign="top">
- <td>
- <p>JP 66
+<td>
- <td>
- <p align="left">27.4.4.3
+<tr valign="top">
+<td>UK308
- <td>
- <p align="left">1<sup>st</sup> <font size="2"
- style="font-size: 11pt">para</font>
+<td>27
- <td>
- <p>te
+<td>
- <td>
- <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”
+<td>Te
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>
+<span lang="en-US">iostreams library cannot be used from
+constrained templates</span>
- <td>
- <p align="left" style="margin-top: 0.04in">
- Replace "operator <i>unspecified-bool-type</i>() const;"
- with "explicit operator bool() const;"
+<td>Provide constraints for the iostreams
+library, clause 27
- <td>
- <p align="left"><br>
+<td>
- <tr valign="top">
- <td>
- <p>FR 36
+<tr valign="top">
+<td>JP65
- <td>
- <p>27.6.1.2.2<br>
- [istream.<br>
- formatted.<br>
- arithmetic]
+<td>27.4.4
- <td>
- <p>1, 2, and 3
+<td>
- <td>
- <p>ed
+<td>te
- <td>
- <p>iostate err = 0;
+<td>Switch from
+“unspecified-bool-type” to<span lang=
+"zxx"> “</span>explicit operator bool()
+const”.
- <p>
+<p>
+<br>
- <p>iostate is a bitmask type and
- so could be an enumeration. Probably using
+<td>
+Replace "operator <i>unspecified-bool-type</i>() const;"
+with "explicit operator bool() const;"
- <p>goodbit is the solution.
+<td>
- <p>
+<tr valign="top">
+<td>JP66
- <td>
- <p align="left"><br>
+<td>27.4.4.3
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<td>1<sup>st</sup> <font size="2"
+style="font-size: 11pt">para</font>
- <tr valign="top">
- <td>
- <p>FR 37
+<td>te
- <td>
- <p>27.6.1.2.2<br>
- [istream.<br>
- formatted.<br>
- arithmetic]
+<td>Switch from
+“unspecified-bool-type” to<span lang=
+"zxx"> “</span>explicit operator bool()
+const”
- <td>
- <p>3
+<p>
+<br>
- <td>
- <p>ed
+<td>
+Replace "operator <i>unspecified-bool-type</i>() const;"
+with "explicit operator bool() const;"
- <td>
- <p>else if (lval <
- numeric_limits<int>::min()
+<td>
- <p>||
- numeric_limits<int>::max() < lval))
+<tr valign="top">
+<td>FR36
- <p>
+<td>27.6.1.2.2<br>
+[istream.<br>
+formatted.<br>
+arithmetic]
- <p>The parentheses aren't
- balanced.
+<td>1, 2, and 3
- <p>
+<td>ed
- <td>
- <p align="left"><br>
+<td>iostate err = 0;
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<p>
- <tr valign="top">
- <td>
- <p>JP 67
+<p>iostate is a bitmask type and
+so could be an enumeration. Probably using
- <td>
- <p align="left">27.7.1
+<p>goodbit is the solution.
- <td>
- <p align="left"><br>
+<p>
- <td>
- <p>te
+<td>
- <td>
- <p align="left" style="margin-top: 0.04in">
- basic_stringbuf dose not use concept.
+<td>[Being reviewed by Editor]<br>
- <td>
- <p align="left">
- Replace “class Allocator” to “Allocator
- Alloc”.
+
- <p align="left">
- Correct as follows.
+<tr valign="top">
+<td>FR37
- <p align="left">
- <br>
+<td>27.6.1.2.2<br>
+[istream.<br>
+formatted.<br>
+arithmetic]
- <p align="left">
- namespace std {
+<td>3
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
+<td>ed
- <p align="left">
- <u>Allocator Alloc</u> = allocator<charT> >
+<td>else if (lval <
+numeric_limits<int>::min()
- <p align="left">
- class basic_stringbuf : public
- basic_streambuf<charT,traits> {
+<p>||
+numeric_limits<int>::max() < lval))
- <p align="left">
- public:
+<p>
- <p align="left">...
+<p>The parentheses aren't
+balanced.
- <p align="left">
- <br>
+<p>
- <p align="left">//
- 27.7.1.1 Constructors:
+<td>
- <p align="left">
- explicit basic_stringbuf(ios_base::openmode which
+<td>[Being reviewed by Editor]<br>
- <p align="left">=
- ios_base::in | ios_base::out);
+
- <p align="left">
- explicit basic_stringbuf
+<tr valign="top">
+<td>JP67
- <p align="left">
- (const basic_string<charT,traits,<u>Alloc</u>>&
- str,
+<td>27.7.1
- <p align="left">
- ios_base::openmode which = ios_base::in | ios_base::out);
+<td>
- <p align="left">
- basic_stringbuf(basic_stringbuf&& rhs);
+<td>te
- <p align="left">
-
+<td>
+basic_stringbuf dose not use concept.
- <p align="left">...
+<td>
+Replace “class Allocator” to “Allocator
+Alloc”.
- <p align="left">
-
+<p>
+ Correct as follows.
- <p align="left">
-
+<p>
+<br>
- <p align="left">//
- 27.7.1.3 Get and set:
+<p>
+namespace std {
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>> str() const;
+<p>
+template <class charT, class traits =
+char_traits<charT>,
- <p align="left">
- void str(const
- basic_string<charT,traits,<u>Alloc</u>>& s);
+<p>
+<u>Allocator Alloc</u> = allocator<charT> >
- <p align="left">
-
+<p>
+class basic_stringbuf : public
+basic_streambuf<charT,traits> {
- <p align="left">...
+<p>
+public:
- <p align="left">};
+<p>...
- <p align="left">
-
+<p>
+<br>
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
+<p>//
+27.7.1.1 Constructors:
- <p align="left">
- void swap(basic_stringbuf<charT, traits,
- <u>Alloc</u>>& x,
+<p>
+explicit basic_stringbuf(ios_base::openmode which
- <p align="left">
- basic_stringbuf<charT, traits, <u>Alloc</u>>& y);
+<p>=
+ios_base::in | ios_base::out);
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
+<p>
+explicit basic_stringbuf
- <p align="left">
- void swap(basic_stringbuf<charT, traits,
- <u>Alloc</u>>&& x,
+<p>
+(const basic_string<charT,traits,<u>Alloc</u>>&
+str,
- <p align="left">
- basic_stringbuf<charT, traits, <u>Alloc</u>>& y);
+<p>
+ios_base::openmode which = ios_base::in | ios_base::out);
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
+<p>
+basic_stringbuf(basic_stringbuf&& rhs);
- <p align="left">
- void swap(basic_stringbuf<charT, traits,
- <u>Alloc</u>>& x,
+<p>
+
- <p align="left">
- basic_stringbuf<charT, traits,
- <u>Alloc</u>>&& y);
+<p>...
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">}
+<p>
+
- <p align="left" style="margin-top: 0.04in">
- <br>
+<p>
+
- <td>
- <p align="left"><br>
+<p>//
+27.7.1.3 Get and set:
- <tr valign="top">
- <td>
- <p>JP 68
+<p>
+basic_string<charT,traits,<u>Alloc</u>> str() const;
- <td>
- <p align="left">27.7.2
+<p>
+void str(const
+basic_string<charT,traits,<u>Alloc</u>>& s);
- <td>
- <p align="left"><br>
+<p>
+
- <td>
- <p>te
+<p>...
- <td>
- <p align="left" style="margin-top: 0.04in">
- basic_istringstream dose not use concept.
+<p>};
- <td>
- <p align="left">
- Replace “class Allocator” to “Allocator
- Alloc”.
+<p>
+
- <p align="left">
- Correct as follows.
+<p>
+template <class charT, class traits, <u>Allocator
+Alloc</u>>
- <p align="left">
-
+<p>
+void swap(basic_stringbuf<charT, traits,
+<u>Alloc</u>>& x,
- <p align="left">
- namespace std {
+<p>
+basic_stringbuf<charT, traits, <u>Alloc</u>>& y);
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
+<p>
+template <class charT, class traits, <u>Allocator
+Alloc</u>>
- <p align="left">
- <u>Allocator Alloc</u> = allocator<charT> >
+<p>
+void swap(basic_stringbuf<charT, traits,
+<u>Alloc</u>>&& x,
- <p align="left">
- class basic_istringstream : public
- basic_istream<charT,traits> {
+<p>
+basic_stringbuf<charT, traits, <u>Alloc</u>>& y);
- <p align="left">
- public:
+<p>
+template <class charT, class traits, <u>Allocator
+Alloc</u>>
- <p align="left">
- typedef charT char_type;
+<p>
+void swap(basic_stringbuf<charT, traits,
+<u>Alloc</u>>& x,
- <p align="left">
- typedef typename traits::int_type int_type;
+<p>
+basic_stringbuf<charT, traits,
+<u>Alloc</u>>&& y);
- <p align="left">
- typedef typename traits::pos_type pos_type;
+<p>}
- <p align="left">
- typedef typename traits::off_type off_type;
+<p>
+<br>
- <p align="left">
- typedef traits traits_type;
+<td>
- <p align="left">
- typedef <u>Alloc</u> allocator_type;
+<tr valign="top">
+<td>JP68
- <p align="left">
- <br>
+<td>27.7.2
- <p align="left">//
- 27.7.2.1 Constructors:
+<td>
- <p align="left">
- explicit basic_istringstream(ios_base::openmode which =
- ios_base::in);
+<td>te
- <p align="left">
- explicit basic_istringstream(
+<td>
+basic_istringstream dose not use concept.
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- str,
+<td>
+Replace “class Allocator” to “Allocator
+Alloc”.
- <p align="left">
- ios_base::openmode which = ios_base::in);
+<p>
+ Correct as follows.
- <p align="left">
- basic_istringstream(basic_istringstream&& rhs);
+<p>
+
- <p align="left">
-
+<p>
+namespace std {
- <p align="left">//
- 27.7.2.2 Assign and swap:
+<p>
+template <class charT, class traits =
+char_traits<charT>,
- <p align="left">
- basic_istringstream&
- operator=(basic_istringstream&& rhs);
+<p>
+<u>Allocator Alloc</u> = allocator<charT> >
- <p align="left">
- void swap(basic_istringstream&& rhs);
+<p>
+class basic_istringstream : public
+basic_istream<charT,traits> {
- <p align="left">
-
+<p>
+public:
- <p align="left">//
- 27.7.2.3 Members:
+<p>
+typedef charT char_type;
- <p align="left">
- basic_stringbuf<charT,traits,<u>Alloc</u>>* rdbuf()
- const;
+<p>
+typedef typename traits::int_type int_type;
- <p align="left">
-
+<p>
+typedef typename traits::pos_type pos_type;
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>> str() const;
+<p>
+typedef typename traits::off_type off_type;
- <p align="left">
- void str(const
- basic_string<charT,traits,<u>Alloc</u>>& s);
+<p>
+typedef traits traits_type;
- <p align="left">
-
+<p>
+typedef <u>Alloc</u> allocator_type;
- <p align="left">
- private:
+<p>
+<br>
- <p align="left">//
- basic_stringbuf<charT,traits,<u>Alloc</u>> sb;
- exposition only
+<p>//
+27.7.2.1 Constructors:
- <p align="left">};
+<p>
+explicit basic_istringstream(ios_base::openmode which =
+ios_base::in);
- <p align="left">
-
+<p>
+explicit basic_istringstream(
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+str,
- <p align="left">
- void swap(basic_istringstream<charT, traits,
- <u>Alloc</u>>& x,
+<p>
+ios_base::openmode which = ios_base::in);
- <p align="left">
- basic_istringstream<charT, traits, <u>Alloc</u>>&
- y);
+<p>
+basic_istringstream(basic_istringstream&& rhs);
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
+<p>
+
- <p align="left">
- void swap(basic_istringstream<charT, traits,
- <u>Alloc</u>>&& x,
+<p>//
+27.7.2.2 Assign and swap:
- <p align="left">
- basic_istringstream<charT, traits, <u>Alloc</u>>&
- y);
+<p>
+basic_istringstream&
+operator=(basic_istringstream&& rhs);
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
+<p>
+void swap(basic_istringstream&& rhs);
- <p align="left">
- void swap(basic_istringstream<charT, traits,
- <u>Alloc</u>>& x,
+<p>
+
- <p align="left">
- basic_istringstream<charT, traits,
- <u>Alloc</u>>&& y);
+<p>//
+27.7.2.3 Members:
- <p align="left">}
+<p>
+basic_stringbuf<charT,traits,<u>Alloc</u>>* rdbuf()
+const;
- <p align="left"><br>
+<p>
+
- <td>
- <p align="left"><br>
+<p>
+basic_string<charT,traits,<u>Alloc</u>> str() const;
- <tr valign="top">
- <td>
- <p>JP 69
+<p>
+void str(const
+basic_string<charT,traits,<u>Alloc</u>>& s);
- <td>
- <p align="left">27.7.3
+<p>
+
- <td>
- <p align="left"><br>
+<p>
+private:
- <td>
- <p>te
+<p>//
+basic_stringbuf<charT,traits,<u>Alloc</u>> sb;
+exposition only
- <td>
- <p align="left" style="margin-top: 0.04in">
- basic_ostringstream dose not use concept.
+<p>};
- <td>
- <p align="left">
- Replace “class Allocator” to “Allocator
- Alloc”.
+<p>
+
- <p align="left">
- Correct as follows.
+<p>
+template <class charT, class traits, <u>Allocator
+Alloc</u>>
- <p align="left">
- <br>
+<p>
+void swap(basic_istringstream<charT, traits,
+<u>Alloc</u>>& x,
- <p align="left">
- namespace std {
+<p>
+basic_istringstream<charT, traits, <u>Alloc</u>>&
+y);
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
+<p>
+template <class charT, class traits, <u>Allocator
+Alloc</u>>
- <p align="left">
- <u>Allocator Alloc</u> = allocator<charT> >
+<p>
+void swap(basic_istringstream<charT, traits,
+<u>Alloc</u>>&& x,
- <p align="left">
- class basic_ostringstream : public
- basic_ostream<charT,traits> {
+<p>
+basic_istringstream<charT, traits, <u>Alloc</u>>&
+y);
- <p align="left">
- public:
+<p>
+template <class charT, class traits, <u>Allocator
+Alloc</u>>
- <p align="left">//
- types:
+<p>
+void swap(basic_istringstream<charT, traits,
+<u>Alloc</u>>& x,
- <p align="left">
- typedef charT char_type;
+<p>
+basic_istringstream<charT, traits,
+<u>Alloc</u>>&& y);
- <p align="left">
- typedef typename traits::int_type int_type;
+<p>}
- <p align="left">
- typedef typename traits::pos_type pos_type;
+<td>
- <p align="left">
- typedef typename traits::off_type off_type;
+<tr valign="top">
+<td>JP69
- <p align="left">
- typedef traits traits_type;
+<td>27.7.3
- <p align="left">
- typedef <u>Alloc</u> allocator_type;
+<td>
- <p align="left">
-
+<td>te
- <p align="left">//
- 27.7.3.1 Constructors/destructor:
+<td>
+basic_ostringstream dose not use concept.
- <p align="left">
- explicit basic_ostringstream(ios_base::openmode which =
- ios_base::out);
+<td>
+Replace “class Allocator” to “Allocator
+Alloc”.
- <p align="left">
- explicit basic_ostringstream(
+<p>
+ Correct as follows.
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- str,
+<p>
+<br>
- <p align="left">
- ios_base::openmode which = ios_base::out);
+<p>
+namespace std {
- <p align="left">
- basic_ostringstream(basic_ostringstream&& rhs);
+<p>
+template <class charT, class traits =
+char_traits<charT>,
- <p align="left">
-
+<p>
+<u>Allocator Alloc</u> = allocator<charT> >
- <p align="left">//
- 27.7.3.2 Assign/swap:
+<p>
+class basic_ostringstream : public
+basic_ostream<charT,traits> {
- <p align="left">
- basic_ostringstream&
- operator=(basic_ostringstream&& rhs);
+<p>
+public:
- <p align="left">
- void swap(basic_ostringstream&& rhs);
+<p>//
+types:
- <p align="left">
-
+<p>
+typedef charT char_type;
- <p align="left">//
- 27.7.3.3 Members:
+<p>
+typedef typename traits::int_type int_type;
- <p align="left">
- basic_stringbuf<charT,traits,<u>Alloc</u>>* rdbuf()
- const;
+<p>
+typedef typename traits::pos_type pos_type;
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>> str() const;
+<p>
+typedef typename traits::off_type off_type;
- <p align="left">
- void str(const
- basic_string<charT,traits,<u>Alloc</u>>& s);
+<p>
+typedef traits traits_type;
- <p align="left">
- private:
+<p>
+typedef <u>Alloc</u> allocator_type;
- <p align="left">//
- basic_stringbuf<charT,traits,<u>Alloc</u>> sb;
- exposition only
+<p>
+
- <p align="left">};
+<p>//
+27.7.3.1 Constructors/destructor:
- <p align="left">
-
+<p>
+explicit basic_ostringstream(ios_base::openmode which =
+ios_base::out);
- <p align="left">
- template <class charT, class traits, <u>Allocator</u>
- <font size="2" style=
- "font-size: 11pt"><u>Alloc</u>></font>
+<p>
+explicit basic_ostringstream(
- <p align="left">
- void swap(basic_ostringstream<charT, traits,
- <u>Alloc</u>>& x,
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+str,
- <p align="left">
- basic_ostringstream<charT, traits, <u>Alloc</u>>&
- y);
+<p>
+ios_base::openmode which = ios_base::out);
- <p align="left">
- template <class charT, class traits, <u>Allocator</u>
- <font size="2" style=
- "font-size: 11pt"><u>Alloc</u>></font>
+<p>
+basic_ostringstream(basic_ostringstream&& rhs);
- <p align="left">
- void swap(basic_ostringstream<charT, traits,
- <u>Alloc</u>>&& x,
+<p>
+
- <p align="left">
- basic_ostringstream<charT, traits, <u>Alloc</u>>&
- y);
+<p>//
+27.7.3.2 Assign/swap:
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
+<p>
+basic_ostringstream&
+operator=(basic_ostringstream&& rhs);
- <p align="left">
- void swap(basic_ostringstream<charT, traits,
- <u>Alloc</u>>& x,
+<p>
+void swap(basic_ostringstream&& rhs);
- <p align="left">
- basic_ostringstream<charT, traits,
- <u>Alloc</u>>&& y);
+<p>
+
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">}
+<p>//
+27.7.3.3 Members:
- <p align="left" style="margin-top: 0.04in">
- <br>
+<p>
+basic_stringbuf<charT,traits,<u>Alloc</u>>* rdbuf()
+const;
- <td>
- <p align="left"><br>
+<p>
+basic_string<charT,traits,<u>Alloc</u>> str() const;
- <tr valign="top">
- <td>
- <p>JP 71
+<p>
+void str(const
+basic_string<charT,traits,<u>Alloc</u>>& s);
- <td>
- <p align="left">27.7.3
+<p>
+private:
- <td>
- <p align="left"><br>
+<p>//
+basic_stringbuf<charT,traits,<u>Alloc</u>> sb;
+exposition only
- <td>
- <p>ed
+<p>};
- <td>
- <p align="left">
- Typo.
+<p>
+
- <p align="left">"template" is missing in
- "class basic_ostringstream" of the title of the chapter.
+<p>
+template <class charT, class traits, <u>Allocator</u>
+<font size="2" style=
+"font-size: 11pt"><u>Alloc</u>></font>
- <td>
- <p align="left">
- Correct as follows.
+<p>
+void swap(basic_ostringstream<charT, traits,
+<u>Alloc</u>>& x,
- <p align="left">
- 27.7.3 Class basic_ostringstream
+<p>
+basic_ostringstream<charT, traits, <u>Alloc</u>>&
+y);
- <p align="left">
- <br>
+<p>
+template <class charT, class traits, <u>Allocator</u>
+<font size="2" style=
+"font-size: 11pt"><u>Alloc</u>></font>
- <p align="left">
- should be
+<p>
+void swap(basic_ostringstream<charT, traits,
+<u>Alloc</u>>&& x,
- <p align="left">
- <br>
+<p>
+basic_ostringstream<charT, traits, <u>Alloc</u>>&
+y);
- <p align="left">27.7.3 Class <u>template</u>
- basic_ostringstream
+<p>
+template <class charT, class traits, <u>Allocator
+Alloc</u>>
- <td>
- <p align="left">[Being reviewed by Editor]<br>
+<p>
+void swap(basic_ostringstream<charT, traits,
+<u>Alloc</u>>& x,
- <tr valign="top">
- <td>
- <p>JP 72
+<p>
+basic_ostringstream<charT, traits,
+<u>Alloc</u>>&& y);
- <td>
- <p align="left">27.7.4
+<p>}
- <td>
- <p align="left"><br>
+<p>
+<br>
- <td>
- <p>te
+<td>
- <td>
- <p align="left" style="margin-top: 0.04in">
- basic_stringstream dose not use concept.
+<tr valign="top">
+<td>JP71
- <td>
- <p align="left">
- Replace "class Allocator" to "Allocator Alloc".
+<td>27.7.3
- <p align="left">
- Correct as follows.
+<td>
- <p align="left">
-
+<td>ed
- <p align="left">
- namespace std {
+<td>
+Typo.
- <p align="left">
- template <class charT, class traits =
- char_traits<charT>,
+<p>"template" is missing in
+"class basic_ostringstream" of the title of the chapter.
- <p align="left">
- <u>Allocator Alloc</u> = allocator<charT> >
+<td>
+Correct as follows.
- <p align="left">
- class basic_stringstream
+<p>
+27.7.3 Class basic_ostringstream
- <p align="left">:
- public basic_iostream<charT,traits> {
+<p>
+<br>
- <p align="left">
- public:
+<p>
+should be
- <p align="left">//
- types:
+<p>
+<br>
- <p align="left">
- typedef charT char_type;
+<p>27.7.3 Class <u>template</u>
+basic_ostringstream
- <p align="left">
- typedef typename traits::int_type int_type;
+<td>[Being reviewed by Editor]<br>
- <p align="left">
- typedef typename traits::pos_type pos_type;
+
- <p align="left">
- typedef typename traits::off_type off_type;
+<tr valign="top">
+<td>JP72
- <p align="left">
- typedef traits traits_type;
+<td>27.7.4
- <p align="left">
- typedef <u>Alloc</u> allocator_type;
+<td>
- <p align="left">
-
+<td>te
- <p align="left">//
- constructors/destructor
+<td>
+basic_stringstream dose not use concept.
- <p align="left">
- explicit basic_stringstream(
+<td>
+Replace "class Allocator" to "Allocator Alloc".
- <p align="left">
- ios_base::openmode which = ios_base::out|ios_base::in);
+<p>
+ Correct as follows.
- <p align="left">
- explicit basic_stringstream(
+<p>
+
- <p align="left">
- const basic_string<charT,traits,<u>Alloc</u>>&
- str,
+<p>
+namespace std {
- <p align="left">
- ios_base::openmode which = ios_base::out|ios_base::in);
+<p>
+template <class charT, class traits =
+char_traits<charT>,
- <p align="left">
- basic_stringstream(basic_stringstream&& rhs);
+<p>
+<u>Allocator Alloc</u> = allocator<charT> >
- <p align="left">
-
+<p>
+class basic_stringstream
- <p align="left">//
- 27.7.5.1 Assign/swap:
+<p>:
+public basic_iostream<charT,traits> {
- <p align="left">
- void swap(basic_stringstream&& rhs);
+<p>
+public:
- <p align="left">
-
+<p>//
+types:
- <p align="left">//
- Members:
+<p>
+typedef charT char_type;
- <p align="left">
- basic_stringbuf<charT,traits,<u>Alloc</u>>* rdbuf()
- const;
+<p>
+typedef typename traits::int_type int_type;
- <p align="left">
- basic_string<charT,traits,<u>Alloc</u>> str() const;
+<p>
+typedef typename traits::pos_type pos_type;
- <p align="left">
- void str(const
- basic_string<charT,traits,<u>Alloc</u>>& str);
+<p>
+typedef typename traits::off_type off_type;
- <p align="left">
- private:
+<p>
+typedef traits traits_type;
- <p align="left">//
- basic_stringbuf<charT, traits> sb; exposition only
+<p>
+typedef <u>Alloc</u> allocator_type;
- <p align="left">};
+<p>
+
- <p align="left">
-
+<p>//
+constructors/destructor
- <p align="left">
- template <class charT, class traits, <u>Allocator
- Alloc</u>>
+<p>
+explicit basic_stringstream(
- <p align="left">
- void swap(basic_stringstream<charT, traits,
- <u>Alloc</u>>& x,
+<p>
+ios_base::openmode which = ios_base::out|ios_base::in);
- <p align="left">
- basic_stringstream<charT, traits, <u>Alloc</u>>&
- y);
+<p>
+explicit basic_stringstream(
- <p align="left">
- template <class charT, class traits, <u>Allocator</u>
- <font size="2" style=
- "font-size: 11pt"><u>Alloc</u>></font>
+<p>
+const basic_string<charT,traits,<u>Alloc</u>>&
+str,
- <p align="left">
- void swap(basic_stringstream<charT, traits,
- <u>Alloc</u>>&& x,
+<p>
+ios_base::openmode which = ios_base::out|ios_base::in);
- <p align="left">
- basic_stringstream<charT, traits, <u>Alloc</u>>&
- y);
+<p>
+basic_stringstream(basic_stringstream&& rhs);
- <p align="left">
- template <class charT, class traits, <u>Allocator</u>
- <font size="2" style=
- "font-size: 11pt"><u>Alloc</u>></font>
+<p>
+
- <p align="left">
- void swap(basic_stringstream<charT, traits,
- <u>Alloc</u>>& x,
+<p>//
+27.7.5.1 Assign/swap:
- <p align="left">
- basic_stringstream<charT, traits,
- <u>Alloc</u>>&& y);
+<p>
+void swap(basic_stringstream&& rhs);
- <p align="left" style="margin-top: 0.04in">}
+<p>
+
- <td>
- <p align="left"><br>
+<p>//
+Members:
- <tr valign="top">
- <td>
- <p>JP 73
+<p>
+basic_stringbuf<charT,traits,<u>Alloc</u>>* rdbuf()
+const;
- <td>
- <p align="left">27.8.1.14
+<p>
+basic_string<charT,traits,<u>Alloc</u>> str() const;
- <td>
- <p align="left"><br>
+<p>
+void str(const
+basic_string<charT,traits,<u>Alloc</u>>& str);
- <td>
- <p>te
+<p>
+private:
- <td>
- <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>//
+basic_stringbuf<charT, traits> sb; exposition only
- <p align="left" style="margin-top: 0.04in">
- <br>
+<p>};
- <td>
- <p align="left" style="margin-top: 0.04in">Add
- interface corresponding to wchar_t, char16_t and char32_t.
+<p>
+
- <td>
- <p align="left"><br>
+<p>
+template <class charT, class traits, <u>Allocator
+Alloc</u>>
- <tr valign="top">
- <td>
- <p align="left">US 86
+<p>
+void swap(basic_stringstream<charT, traits,
+<u>Alloc</u>>& x,
- <td>
- <p align="left">28
+<p>
+basic_stringstream<charT, traits, <u>Alloc</u>>&
+y);
- <td>
- <p align="left"><br>
+<p>
+template <class charT, class traits, <u>Allocator</u>
+<font size="2" style=
+"font-size: 11pt"><u>Alloc</u>></font>
- <td>
- <p align="left">ge
+<p>
+void swap(basic_stringstream<charT, traits,
+<u>Alloc</u>>&& x,
- <td>
- <p align="left">The
- regular expressions chapter is not concept enabled.
+<p>
+basic_stringstream<charT, traits, <u>Alloc</u>>&
+y);
- <p align="left"><br>
+<p>
+template <class charT, class traits, <u>Allocator</u>
+<font size="2" style=
+"font-size: 11pt"><u>Alloc</u>></font>
- <td>
- <p align="left"><br>
+<p>
+void swap(basic_stringstream<charT, traits,
+<u>Alloc</u>>& x,
- <td>
- <p align="left">US86, UK309, UK310: We believe that an issue can be
- opened and we await a volunteer.<br>
+<p>
+basic_stringstream<charT, traits,
+<u>Alloc</u>>&& y);
- <tr valign="top">
- <td>
- <p>UK<br>
- 309
+<p>}
- <td>
- <p align="justify">28
+<td>
- <td>
- <p align="justify"><br>
+<tr valign="top">
+<td>JP73
- <td>
- <p align="justify">Te
+<td>27.8.1.14
- <td>
- <p align="left">Regular
- expressions cannot be used in constrained templates
+<td>
- <p align="left"><br>
+<td>te
- <td>
- <p align="left">Provide constraints for the regular
- expression library, clause 28
+<td>It is a problem
+from C++98, fstream cannot appoint a filename of wide
+character string(const wchar_t and const wstring&).
- <td>
- <p align="left">US86, UK309, UK310: We believe that an issue can be
- opened and we await a volunteer.<br>
+<p>
+<br>
- <tr valign="top">
- <td>
- <p>UK<br>
- 310
+<td>Add
+interface corresponding to wchar_t, char16_t and char32_t.
- <td>
- <p align="justify">28
+<td>
- <td>
- <p align="justify"><br>
+<tr valign="top">
+<td>US86
- <td>
- <p align="justify">Te
+<td>28
- <td>
- <p align="left">The regex chapter uses iterators in the old
- pre-concept style, it should be changed to use concepts
- instead.
+<td>
- <td>
- <p align="left">Use concepts for iterator template
- arguments throughout.
+<td>ge
- <td>
- <p align="left">US86, UK309, UK310: We believe that an issue can be
- opened and we await a volunteer.<tr valign="top">
- <td>
- <p>UK<br>
- 314
+<td>The
+regular expressions chapter is not concept enabled.
- <td>
- <p align="justify">28.4
+<td>
- <td>
- <p align="justify"><br>
+<td>US86, UK309, UK310: We believe that an issue can be
+opened and we await a volunteer.<br>
- <td>
- <p align="justify">Te
+
- <td>
- <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.
+<tr valign="top">
+<td>UK309
- <p align="left"><br>
+<td>28
- <td>
- <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>
- <td>
- <p align="left">deferred to discussion of N2831.<br>
+<td>Te
- <tr valign="top">
- <td>
- <p>UK<br>
- 315
+<td>Regular
+expressions cannot be used in constrained templates
- <td>
- <p align="justify">28.4
+<td>Provide constraints for the regular
+expression library, clause 28
- <td>
- <p align="justify">p6
+<td>US86, UK309, UK310: We believe that an issue can be
+opened and we await a volunteer.<br>
- <td>
- <p align="justify">Te
+
- <td>
- <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() ?
+<tr valign="top">
+<td>UK310
- <p align="left"><br>
+<td>28
- <td>
- <p align="left">Reword to effect clause to use legal
- iterator dereferences
+<td>
- <td>
- <p align="left">We believe that this is editorial.<br>
+<td>Te
- <tr valign="top">
- <td>
- <p>UK<br>
- 316
+<td>The regex chapter uses iterators in the old
+pre-concept style, it should be changed to use concepts
+instead.
- <td>
- <p align="justify">28.4 ff
+<td>Use concepts for iterator template
+arguments throughout.
- <td>
- <p align="justify"><br>
+<td>US86, UK309, UK310: We believe that an issue can be
+opened and we await a volunteer.
- <td>
- <p align="justify">Te
+<tr valign="top">
+<td>UK314
- <td>
- <p align="left">The constructors
- for regex classes do not have an r-value overload.
+<td>28.4
- <p align="left"><br>
+<td>
- <td>
- <p align="left">Add the missing r-value constructors to
- regex classes.
+<td>Te
- <td>
- <p align="left">We agree and await assistance from the UK.<br>
+<td>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.
- <tr valign="top">
- <td>
- <p>UK<br>
- 317
+<td>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>
- <p align="justify">28.8
+<td>deferred to discussion of N2831.<br>
- <td>
- <p align="justify"><br>
+
- <td>
- <p align="justify">Te
+<tr valign="top">
+<td>UK315
- <td>
- <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>28.4
- <td>
- <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());
+<td>p6
- <p align="left"><br>
+<td>Te
- <td>
- <p align="left">UK317, JP74: Alisdair will open an issue.<br>
+<td>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() ?
- <tr valign="top">
- <td>
- <p>JP 74
+<td>Reword to effect clause to use legal
+iterator dereferences
- <td>
- <p align="left">28.8
+<td>We believe that this is editorial.<br>
- <td>
- <p align="left"><br>
+
- <td>
- <p>te
+<tr valign="top">
+<td>UK316
- <td>
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">
- “basic_regx & operator=
- (initializer_list<T>);” is not defined.
+<td>28.4 ff
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>
- <td>
- <p align="left" style="margin-top: 0.04in">Add
- basic_regx & operator= (initializer_list<T>);
+<td>Te
- <td>
- <p align="left">UK317, JP74: Alisdair will open an issue.<br>
+<td>The constructors
+for regex classes do not have an r-value overload.
- <tr valign="top">
- <td>
- <p>UK<br>
- 318
+<td>Add the missing r-value constructors to
+regex classes.
- <td>
- <p align="justify">28.8.2
+<td>We agree and await assistance from the UK.<br>
- <td>
- <p align="justify">para 22
+
- <td>
- <p align="justify">Ed
+<tr valign="top">
+<td>UK317
- <td>
- <p align="left">Constructor
- definition should appear with the other constructors not
- after assignment ops.
+<td>28.8
- <p align="left"><br>
+<td>
- <td>
- <p align="left">Move para 22 to just after para 17.
+<td>Te
- <td>
- <p align="left"><br>
+<td>basic_string has both a constructor and an
+assignment operator that accepts an initializer list,
+basic_regex should have the same.
- <tr valign="top">
- <td>
- <p>UK<br>
- 319
+<td>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());
- <td>
- <p align="justify">28.12.2
+<td>UK317, JP74: Alisdair will open an issue.<br>
- <td>
- <p align="justify"><br>
+
- <td>
- <p align="justify">Te
+<tr valign="top">
+<td>JP74
- <td>
- <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>28.8
- <td>
- <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()).
+<td>
- <p align="left"><br>
+<td>te
- <td>
- <p align="left">We agree. Alisdair will open an issue.<p align="left">In
- c++std-lib-23130, <span class="gI">
- <span email="daniel.kruegler_at_[hidden]" class="gD">Daniel Krügler
- pointed out that this comment is already covered by
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#909">
- issue 909</a>.</span></span><br>
+<td>
+“basic_regx & operator=
+(initializer_list<T>);” is not defined.
- <tr valign="top">
- <td>
- <p align="left">US 87
+<p>
+<br>
- <td>
- <p align="left">29
+<td>Add
+basic_regx & operator= (initializer_list<T>);
- <td>
- <p align="left"><br>
+<td>UK317, JP74: Alisdair will open an issue.<br>
- <td>
- <p align="left">ge
+
- <td>
- <p align="left">The
- atomics chapter is not concept enabled. The adopted paper,
- N2427, did have those concepts.
+<tr valign="top">
+<td>UK318
- <p align="left"><br>
+<td>28.8.2
- <td>
- <p align="left"><br>
+<td>para 22
- <td>
- <p align="left">Create an issue for concepts in the atomics chapter. See
- N2427. Needs to also consider issues
- 923 and
- 924.<br>
+<td>Ed
- <tr valign="top">
- <td>
- <p>UK<br>
- 311
+<td>Constructor
+definition should appear with the other constructors not
+after assignment ops.
+
+<td>Move para 22 to just after para 17.
+
+<td>
+
+<tr valign="top">
+<td>UK319
+
+<td>28.12.2
+
+<td>
+
+<td>Te
+
+<td>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>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()).
+
+<td>We agree. Alisdair will open an issue.<p>In
+c++std-lib-23130, <span class="gI">
+<span email="daniel.kruegler_at_[hidden]" class="gD">Daniel Krügler
+pointed out that this comment is already covered by
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#909">
+issue 909</a>.</span></span><br>
- <td>
- <p align="justify">29
+
- <td>
- <p align="justify"><br>
+<tr valign="top">
+<td>US87
- <td>
- <p align="justify">Te
+<td>29
- <td>
- <p align="left">Atomic types
- cannot be used generically in a constrained template
+<td>
- <p align="left"><br>
+<td>ge
- <td>
- <p align="left">Provide constraints for the atomics
- library, clause 29
+<td>The
+atomics chapter is not concept enabled. The adopted paper,
+N2427, did have those concepts.
- <td>
- <p align="left">Duplicate of US 87.<br>
+<td>
- <tr valign="top">
- <td>
- <p>UK<br>
- 312
+<td>Create an issue for concepts in the atomics chapter. See
+N2427. Needs to also consider issues
+923 and
+924.<br>
- <td>
- <p align="justify">29
+
- <td>
- <p align="justify"><br>
+<tr valign="top">
+<td>UK311
- <td>
- <p align="justify">Te
+<td>29
- <td>
- <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>
- <td>
- <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>Te
- <td>
- <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>
+<td>Atomic types
+cannot be used generically in a constrained template
- <tr valign="top">
- <td>
- <p>JP 75
+<td>Provide constraints for the atomics
+library, clause 29
- <td>
- <p align="left">29
+<td>Duplicate of US 87.<br>
- <td>
- <p align="left"><br>
+
- <td>
- <p>ed
+<tr valign="top">
+<td>UK312
- <td>
- <p align="left" style="margin-top: 0.04in">A
- definition of enum or struct is the style of C using
- typedef.
+<td>29
- <td>
- <p align="left">
- Change to a style of C++.
+<td>
- <p align="left">
- Correct as follows.
+<td>Te
- <p align="left">
- <br>
+<td>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>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>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>
- <p align="left">
- 29.1
+
- <p align="left">
-
+<tr valign="top">
+<td>JP75
- <p align="left">
- namespace std {
+<td>29
- <p align="left">
- <u>typedef</u> enum memory_order {
+<td>
- <p align="left">
- memory_order_relaxed, memory_order_consume,
- memory_order_acquire,
+<td>ed
- <p align="left">
- memory_order_release, memory_order_acq_rel,
- memory_order_seq_cst
+<td>A
+definition of enum or struct is the style of C using
+typedef.
- <p align="left">}
- memory_order;
+<td>
+Change to a style of C++.
- <p align="left">}
+<p>
+Correct as follows.
- <p align="left">
- <br>
+<p>
+<br>
- <p align="left">
- should be
+<p>
+29.1
- <p align="left">
- <br>
+<p>
+
- <p align="left">
- namespace std {
+<p>
+namespace std {
- <p align="left">
- enum memory_order {
+<p>
+<u>typedef</u> enum memory_order {
- <p align="left">
- memory_order_relaxed, memory_order_consume,
- memory_order_acquire,
+<p>
+memory_order_relaxed, memory_order_consume,
+memory_order_acquire,
- <p align="left">
- memory_order_release, memory_order_acq_rel,
- memory_order_seq_cst
+<p>
+memory_order_release, memory_order_acq_rel,
+memory_order_seq_cst
- <p align="left">};
+<p>}
+memory_order;
- <p align="left">}
+<p>}
- <p align="left">
- <br>
+<p>
+<br>
- <p align="left">
- 29.3.1
+<p>
+should be
- <p align="left">
- <br>
+<p>
+<br>
- <p align="left">
- namespace std {
+<p>
+namespace std {
- <p align="left">
- <u>typedef</u> struct atomic_bool {
+<p>
+enum memory_order {
- <p align="left">...
+<p>
+memory_order_relaxed, memory_order_consume,
+memory_order_acquire,
- <p align="left">}
- atomic_bool;
+<p>
+memory_order_release, memory_order_acq_rel,
+memory_order_seq_cst
- <p align="left">}
+<p>};
- <p align="left">
- <br>
+<p>}
- <p align="left">
- should be
+<p>
+<br>
- <p align="left">
- <br>
+<p>
+29.3.1
- <p align="left">
- namespace std {
+<p>
+<br>
- <p align="left">
- struct atomic_bool {
+<p>
+namespace std {
- <p align="left">...
+<p>
+<u>typedef</u> struct atomic_bool {
- <p align="left">};
+<p>...
- <p align="left">}
+<p>}
+atomic_bool;
- <p align="left">
- <br>
+<p>}
- <p align="left">
- namespace std {
+<p>
+<br>
- <p align="left">
- <u>typedef</u> struct atomic_<i>itype</i> {
+<p>
+should be
- <p align="left">...
+<p>
+<br>
- <p align="left">}
- atomic_<i>itype</i>;
+<p>
+namespace std {
- <p align="left">}
+<p>
+struct atomic_bool {
- <p align="left">
- <br>
+<p>...
- <p align="left">
- should be
+<p>};
- <p align="left">
- <br>
+<p>}
- <p align="left">
- namespace std {
+<p>
+<br>
- <p align="left">
- struct atomic_<i>itype</i> {
+<p>
+namespace std {
- <p align="left">...
+<p>
+<u>typedef</u> struct atomic_<i>itype</i> {
- <p align="left">};
+<p>...
- <p align="left">}
+<p>}
+atomic_<i>itype</i>;
- <p align="left">
- <br>
+<p>}
- <p align="left">
- 29.3.2
+<p>
+<br>
- <p align="left">
- <br>
+<p>
+should be
- <p align="left">
- namespace std {
+<p>
+<br>
- <p align="left">
- <u>typedef</u> struct atomic_address {
+<p>
+namespace std {
- <p align="left">...
+<p>
+struct atomic_<i>itype</i> {
- <p align="left">}
- atomic_address;
+<p>...
- <p align="left">}
+<p>};
- <p align="left">
- <br>
+<p>}
- <p align="left">
- should be
+<p>
+<br>
- <p align="left">
- <br>
+<p>
+29.3.2
- <p align="left">
- namespace std {
+<p>
+<br>
- <p align="left">
- struct atomic_address {
+<p>
+namespace std {
- <p align="left">...
+<p>
+<u>typedef</u> struct atomic_address {
- <p align="left">};
+<p>...
- <p align="left">}
+<p>}
+atomic_address;
- <p align="left">
- <br>
+<p>}
- <p align="left">
- 29.5
+<p>
+<br>
- <p align="left">
- <br>
+<p>
+should be
- <p align="left">
- namespace std {
+<p>
+<br>
- <p align="left">
- <u>typedef</u> struct atomic_flag {
+<p>
+namespace std {
- <p align="left">...
+<p>
+struct atomic_address {
- <p align="left">}
- atomic_flag;
+<p>...
- <p align="left">}
+<p>};
- <p align="left">
- <br>
+<p>}
- <p align="left">
- should be
+<p>
+<br>
- <p align="left">
- <br>
+<p>
+29.5
- <p align="left">
- namespace std {
+<p>
+<br>
- <p align="left">
- struct atomic_flag {
+<p>
+namespace std {
- <p align="left">...
+<p>
+<u>typedef</u> struct atomic_flag {
- <p align="left">};
+<p>...
- <p align="left">}
+<p>}
+atomic_flag;
- <td>
- <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>
+<p>}
- <tr valign="top">
- <td>
- <p>UK<br>
- 313
+<p>
+<br>
- <td>
- <p align="justify">29.1
+<p>
+should be
- <td>
- <p align="justify"><br>
+<p>
+<br>
- <td>
- <p align="justify">Te
+<p>
+namespace std {
- <td>
- <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
+<p>
+struct atomic_flag {
- <td>
- <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>...
- <p align="left"><br>
+<p>};
- <td>
- <p align="left">Hans to make proposal. See LWG
- Issue 926.<p align="left">
- UK 313 Update and LWG
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#926">
- 926</a>: Accept proposed resolution, correcting
- spelling. Move to review state. Hans to ask additional review from cpp-threads.<br>
+<p>}
- <tr valign="top">
- <td>
- <p align="left">US 88
+<td>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>
- <td>
- <p align="left">29.2
+
- <td>
- <p align="left"><br>
+<tr valign="top">
+<td>UK313
- <td>
- <p align="left">te
+<td>29.1
- <td>
- <p align="left">The "lockfree" facilities do
- not tell the programmer enough.
+<td>
- <td>
- <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"
+<td>Te
- <p align="left"><br>
+<td>seq_cst fences don't necessarily guarantee
+ordering
+http://home.twcny.rr.com/hinnant/cpp_extensions/issues_preview/lwg-active.html#926
+
+<td>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.
+
+<td>Hans to make proposal. See LWG
+Issue 926.<p>
+UK 313 Update and LWG
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#926">
+926</a>: Accept proposed resolution, correcting
+spelling. Move to review state. Hans to ask additional review from cpp-threads.<br>
- <td>
- <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.<p align="left">See wiki for further
- comments.<br>
+
- <tr valign="top">
- <td>
- <p align="left">US 89
+<tr valign="top">
+<td>US88
- <td>
- <p align="left">29.3.1
+<td>29.2
- <td>
- <p align="left">Table 122
+<td>
- <td>
- <p align="left">te
+<td>te
- <td>
- <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.
+<td>The "lockfree" facilities do
+not tell the programmer enough.
- <p align="left"><br>
+<td>
+Expand the "lockfree" facilities. See the attached paper
+"Issues with the C++ Standard" under Chapter 29,
+"atomics.lockfree doesn't tell the programmer enough"
- <td>
- <p align="left">Change the classes to
- typedefs.
+<td>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.<p>See wiki for further
+comments.<br>
- <td>
- <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>
- <p align="left">US 90
+
- <td>
- <p align="left">29.4
+<tr valign="top">
+<td>US89
- <td>
- <p align="left"><br>
+<td>29.3.1
- <td>
- <p align="left">te
+<td>Table 122
- <td>
- <p align="left">Are atomic functions allowed
- to have non-volatile overloads?
+<td>te
- <td>
- <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?"
+<td>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>Change the classes to
+typedefs.
- <td>
- <p align="left">Create an issue. Assigned to Lawrence Crowl. Should
- explicitly consider the process shared issue.<br>
+<td>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>
- <p align="left">US 91
+<tr valign="top">
+<td>US90
- <td>
- <p align="left">29.4
+<td>29.4
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p align="left">te
+<td>te
- <td>
- <p align="left">Whether or not a failed
- compare_exchange is a RMW operation (as used in 1.10
- [intro.multithread]) is unclear.
+<td>Are atomic functions allowed
+to have non-volatile overloads?
- <td>
- <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>
+<td>
+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>Create an issue. Assigned to Lawrence Crowl. Should
+explicitly consider the process shared issue.<br>
- <td>
- <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>
- <p align="left">US 92
+<tr valign="top">
+<td>US91
- <td>
- <p align="left">29.4
+<td>29.4
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p align="left">te
+<td>te
- <td>
- <p align="left">The effect of
- memory_order_consume with atomic RMW operations is unclear.
+<td>Whether or not a failed
+compare_exchange is a RMW operation (as used in 1.10
+[intro.multithread]) is unclear.
- <td>
- <p align="left">
- Follow the lead of fences [atomics.fences], and promote
- memory_order_consume to memory_order_acquire with RMW
- operations.
+<td>
+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>Create an issue, goes to review. Attention: Howard.
+Group agrees with the resolution as proposed by Anthony Williams in the
+attached note.<br>
- <td>
- <p align="left">Create an issue. Assigned to Lawrence. Resolution
- requires proposed wording.<p align="left">Later: Mark as Not A Defect.
- We can not see the issue being suggested by the comment.<br>
+
- <tr valign="top">
- <td>
- <p>JP 76
+<tr valign="top">
+<td>US92
- <td>
- <p align="left">30
+<td>29.4
- <td>
- <p align="left"><br>
+<td>
- <td>
- <p>ed
+<td>te
- <td>
- <p align="left">A
- description for "<i>Throws:</i> Nothing." are not unified.
+<td>The effect of
+memory_order_consume with atomic RMW operations is unclear.
- <p align="left" style="margin-top: 0.04in">At
- the part without throw, "<i>Throws:</i> Nothing." should be
- described.
+<td>
+Follow the lead of fences [atomics.fences], and promote
+memory_order_consume to memory_order_acquire with RMW
+operations.
- <td>
- <p align="left">Add
- "<i>Throws:</i> Nothing." to the following.
+<td>Create an issue. Assigned to Lawrence. Resolution
+requires proposed wording.<p>Later: Mark as Not A Defect.
+We can not see the issue being suggested by the comment.<br>
- <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>
+<tr valign="top">
+<td>JP76
- <p align="left">
- 30.3.3.2.1 , 6<sup>th</sup> <font size="2" style=
- "font-size: 11pt">paragraph</font>
+<td>30
- <p align="left">
- 30.4.1 , 7<sup>th</sup> <font size="2" style=
- "font-size: 11pt">and 8<sup>th</sup> paragraph</font>
+<td>
- <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>
+<td>ed
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>A
+description for "<i>Throws:</i> Nothing." are not unified.
- <td>
- <p align="left">Pass on to editor.<br>
+<p>At
+the part without throw, "<i>Throws:</i> Nothing." should be
+described.
- <tr valign="top">
- <td>
- <p align="left"><a name="US93">US 93</a>
+<td>Add
+"<i>Throws:</i> Nothing." to the following.
- <td>
- <p align="left">30
+<p>
+30.2.1.6 , 1<sup>st</sup> <font size="2" style=
+"font-size: 11pt">paragraph</font>
- <td>
- <p align="left"><br>
+<p>
+30.3.3.1 , 4<sup>th</sup> <font size="2" style=
+"font-size: 11pt">paragraph</font>
- <td>
- <p align="left">ge
+<p>
+30.3.3.2.1 , 6<sup>th</sup> <font size="2" style=
+"font-size: 11pt">paragraph</font>
- <td>
- <p align="left">The
- thread chapter is not concept enabled.
+<p>
+30.4.1 , 7<sup>th</sup> <font size="2" style=
+"font-size: 11pt">and 8<sup>th</sup> paragraph</font>
- <p align="left"><br>
+<p>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>
- <td>
- <p align="left"><br>
+<p>
+<br>
- <td>
- <p align="left">Create an issue. Need to find volunteers to work on
- this.<br>
+<td>Pass on to editor.<br>
- <tr valign="top">
- <td>
- <p align="justify" style=
- "margin-right: -0.18in; margin-bottom: 0in">UK<br>
- 320 F<p>
+
- <td>
- <p align="justify">30
+<tr valign="top">
+<td><a name="US93">US 93</a>
- <td>
- <p align="justify"><br>
+<td>30
- <td>
- <p align="justify">Te
+<td>
- <td>
- <p align="left">Threads library cannot be used in
- constrained templates
+<td>ge
- <td>
- <p align="left">Provide constraints for the threads
- library, clause 30
+<td>The
+thread chapter is not concept enabled.
- <td>
- <p align="left">Duplicate of US 93.<br>
+<td>
- <tr valign="top">
- <td>
- <p>UK<br>
- 321
+<td>Create an issue. Need to find volunteers to work on
+this.<br>
- <td>
- <p align="justify">30
+
- <td>
- <p align="justify"><br>
+<tr valign="top">
+<td><p align="justify" style=
+"margin-right: -0.18in; margin-bottom: 0in">UK320<p>
- <td>
- <p align="justify">Ed
+<td>30
- <td>
- <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.
+<td>
- <p align="left"><br>
+<td>Te
- <td>
- <p align="left">Decument Preconditions: paragraphs in
- 17.5.2.4, and use consistently through rest of the library.
+<td>Threads library cannot be used in
+constrained templates
- <td>
- <p align="left">Pass on to editor.<br>
+<td>Provide constraints for the threads
+library, clause 30
- <tr valign="top">
- <td>
- <p>US 94
+<td>Duplicate of US 93.<br>
- <td>
- <p>30.1.2
+
- <td>
- <p>1
+<tr valign="top">
+<td>UK321
- <td>
- <p>te
+<td>30
- <td>
- <p>The first sentence of para 1 suggests that no other
- library function is permitted to call operating system or
- low level APIs.
+<td>
- <td>
- <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>
+<td>Ed
- <p>
+<td>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.
- <td>
- <p>
+<td>Decument Preconditions: paragraphs in
+17.5.2.4, and use consistently through rest of the library.
- Reclassify as editorial. Pass on to editor, wording roughly as proposed.<tr valign="top">
- <td>
- <p>US 95
+<td>Pass on to editor.<br>
- <td>
- <p>30.1.3
+
- <td>
- <p>1
+<tr valign="top">
+<td>US94
- <td>
- <p>te
+<td>30.1.2
- <td>
- <p>“native_handle_type” is a typedef, not a
- class member.
+<td>1
- <td>
- <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
+<td>te
- <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 ]
+<td>The first sentence of para 1 suggests that no other
+library function is permitted to call operating system or
+low level APIs.
- <p align="left"><br>
+<td>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>
- <td>
- <p>
+<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>
- <p>US 96
+<td>Reclassify as editorial. Pass on to editor, wording roughly as proposed.
- <td>
- <p>30.1.4
+<tr valign="top">
+<td>US95
- <td>
- <p>2
+<td>30.1.3
- <td>
- <p>te
+<td>1
- <td>
- <p>There is no definition here for monotonic clock.
+<td>te
- <td>
- <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.
+<td>“native_handle_type” is a typedef, not a
+class member.
- <p align="left"><br>
+<td>Several classes
+described in this Clause have a member native_handle (of
+type native_handle_type) . The
- <td>
- <p>
+<p>
+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 ]
- There is a good definition. NAD. There are other problems here (see issue
- 859). 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>
- <p>UK<br>
- 322
+<td>Not a defect. native_handle_type is a typedef, but it is also a member of
+ the classes in question.
- <td>
- <p align="justify">30.1.4
+<tr valign="top">
+<td>US96
- <td>
- <p align="justify">2
+<td>30.1.4
- <td>
- <p align="justify">Te
+<td>2
- <td>
- <p align="left">Not all systms
- can provide a monotonic clock. How are they expected to
- treat a _for function?
+<td>te
- <p align="left"><br>
+<td>There is no definition here for monotonic clock.
- <td>
- <p align="left">Add at least a note explaining the intent
- for systems that do not support a monotonic clock.
+<td>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.
- <td>
- <p>
+<td>There is a good definition. NAD. There are other problems here (see issue
+ 859). 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].
- 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>
- <p>UK<br>
- 323
+<tr valign="top">
+<td>UK322
- <td>
- <p align="justify">30.2.1
+<td>30.1.4
- <td>
- <p align="justify">1
+<td>2
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <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.
+<td>Not all systms
+can provide a monotonic clock. How are they expected to
+treat a _for function?
- <p align="left"><br>
+<td>Add at least a note explaining the intent
+for systems that do not support a monotonic clock.
- <td>
- <p align="left">Mark constructor template <class F,
- class ...Args> thread(F&& f, Args&&...
- args); as explicit and remove the single-argument
- constructor.
+<td>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.
- <td>
- <p>
+<tr valign="top">
+<td>UK323
- Create an issue, goes to review. Attention: Howard. Group agrees with the
- proposed resolution.<tr valign="top">
- <td>
- <p>UK<br>
- 324
+<td>30.2.1
- <td>
- <p align="justify">30.2.1.1
+<td>1
- <td>
- <p align="justify"><br>
+<td>Te
- <td>
- <p align="justify">Te
+<td>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.
- <td>
- <p align="left">thread::id
- objects should be as useable in hashing containers as they
- are in ordered associative containers.
+<td>Mark constructor template <class F,
+class ...Args> thread(F&& f, Args&&...
+args); as explicit and remove the single-argument
+constructor.
- <p align="left"><br>
+<td>Create an issue, goes to review. Attention: Howard. Group agrees with the
+ proposed resolution.
- <td>
- <p align="left">Add thread::id
- support for std::hash
+<tr valign="top">
+<td>UK324
- <p align="left"><br>
+<td>30.2.1.1
- <p align="left"><br>
+<td>
- <p align="left"><br>
+<td>Te
- <td>
- <p>
+<td>thread::id
+objects should be as useable in hashing containers as they
+are in ordered associative containers.
- Not a defect. See [unord.hash], where std::thread:id is already listed as a
- required specialization for std::hash().<tr valign="top">
- <td>
- <p>JP 77
+<td>Add thread::id
+support for std::hash
- <td>
- <p align="left">30.2.1.2
+<p><br>
- <td>
- <p align="left"><br>
+<p><br>
- <td>
- <p>te
+<td>Not a defect. See [unord.hash], where std::thread:id is already listed as a
+ required specialization for std::hash().
- <td>
- <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.
+<tr valign="top">
+<td>JP77
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>30.2.1.2
- <td>
- <p align="left" style="margin-top: 0.04in">Add
- a concept for constructor of thread.
+<td>
- <td>
- <p>
+<td>te
- Subset of US 93. Should be addressed under the issue corresponding to US 93.<tr valign="top">
- <td>
- <p>JP 78
+<td>
+"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.
- <td>
- <p align="left">30.2.1.2
+<p>
+<br>
- <td>
- <p align="left">
- 4<sup>th</sup> <font size="2" style=
- "font-size: 11pt">para, 1<sup>st</sup> line</font>
+<td>Add
+a concept for constructor of thread.
- <p align="left"><br>
+<td>Subset of US 93. Should be addressed under the issue corresponding to US 93.
- <td>
- <p>ed
+<tr valign="top">
+<td>JP78
- <td>
- <p align="left" style="margin-top: 0.04in">In
- "F and each Ti in Args", 'Ti' is not clear.
+<td>30.2.1.2
- <td>
- <p align="left" style="margin-top: 0.04in">
- Replace "Ti" with "args"
+<td>
+4<sup>th</sup> <font size="2" style=
+"font-size: 11pt">para, 1<sup>st</sup> line</font>
- <td>
- <p>
+<td>ed
- Pass on to editor.<tr valign="top">
- <td>
- <p>US 97
+<td>In
+"F and each Ti in Args", 'Ti' is not clear.
- <td>
- <p>30.2.1.3
+<td>
+Replace "Ti" with "args"
- <td>
- <p>1
+<td>Pass on to editor.
- <td>
- <p>te
+<tr valign="top">
+<td>US97
- <td>
- <p>detach-on-destruction may result in
- “escaped” threads accessing objects with
- bounded lifetime after the end of their lifetime.
+<td>30.2.1.3
- <td>
- <p>See document WG21 N2802=08-0312 written by Hans Boehm.
+<td>1
- <td>
- <p>
+<td>te
- Create an issue. To be discussed in full library group.<p>
+<td>detach-on-destruction may result in
+“escaped” threads accessing objects with
+bounded lifetime after the end of their lifetime.
- Later: straw poll 10-0, put N2802 Alternative 2 on formal motions page.<tr valign="top">
- <td>
- <p align="left">US 98
+<td>See document WG21 N2802=08-0312 written by Hans Boehm.
- <td>
- <p align="left">30.2.1.3,<br>
- 30.2.1.4
+<td>Create an issue. To be discussed in full library group.<p>
- <td>
- <p align="left"><br>
+ Later: straw poll 10-0, put N2802 Alternative 2 on formal motions page.
- <td>
- <p align="left"><br>
+<tr valign="top">
+<td>US98
- <td>
- <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>30.2.1.3,<br>
+30.2.1.4
- <td>
- <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".
+<td>
- <p align="left"><br>
+<td>
- <td>
- <p>
+<td>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.
- Duplicate of US 97.<tr valign="top">
- <td>
- <p>UK<br>
- 325
+<td>
+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".
- <td>
- <p align="justify">30.3.3
+<td>Duplicate of US 97.
- <td>
- <p align="justify">2
+<tr valign="top">
+<td>UK325
- <td>
- <p align="justify">Te
+<td>30.3.3
- <td>
- <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>2
- <td>
- <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{};
+<td>Te
- <p align="left"><br>
+<td>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>
- <p>
+<td>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{};
- Create an issue. Move to review, attention: Howard. The current
+<td>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>
- <p>UK<br>
- 326
-
- <td>
- <p align="justify">30.3.3.2.1
-
- <td>
- <p align="justify">7
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <p align="left">Strike 30.3.3.2.1p7
-
- <td>
- <p>
-
- Create an issue. Move to review, attention: Howard. Proposed resolution is
- fine.<tr valign="top">
- <td>
- <p>UK<br>
- 327
-
- <td>
- <p align="justify">30.3.3.2.2
-
- <td>
- <p align="justify">4, 9, 14, 19
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <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.
+ "hack".
+
+<tr valign="top">
+<td>UK326
+
+<td>30.3.3.2.1
+
+<td>7
- <td>
- <p>
+<td>Te
+
+<td>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.
+
+<td>Strike 30.3.3.2.1p7
+
+<td>Create an issue. Move to review, attention: Howard. Proposed resolution is
+ fine.
+
+<tr valign="top">
+<td>UK327
+
+<td>30.3.3.2.2
+
+<td>4, 9, 14, 19
+
+<td>Te
+
+<td>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.
+
+<td>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.
- Create an issue. Assigned to Lawrence Crowl. Note: not sure what try_lock
+<td>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>
- <p>UK<br>
- 328
-
- <td>
- <p align="justify">30.3.3.2.2
-
- <td>
- <p align="justify">20
-
- <td>
- <p align="justify">Te
-
- <td>
- <p align="left">There is a missing precondition that owns
- is true, or an if(owns) test is missing from the effect
- clause
-
- <td>
- <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>
- <p>
-
- Handle in same issue as UK 327. Also uncertain that the proposed resolution
- is the correct one.<tr valign="top">
- <td>
- <p>UK<br>
- 329
-
- <td>
- <p align="justify">30.5
-
- <td>
- <p align="justify"><br>
-
- <td>
- <p align="justify">Te
-
- <td>
- <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>
- <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.]
+ example, try_lock should have different wording from lock.
- <p align="left"><br>
+<tr valign="top">
+<td>UK328
- <td>
- <p>
+<td>30.3.3.2.2
- The concurrency subgroup has revisited this issue and decided that it could
+<td>20
+
+<td>Te
+
+<td>There is a missing precondition that owns
+is true, or an if(owns) test is missing from the effect
+clause
+
+<td>Add a
+precondition that owns == true. Add an error condition to
+detect a violation, rather than yield undefined behaviour.
+
+<td>Handle in same issue as UK 327. Also uncertain that the proposed resolution
+ is the correct one.
+
+<tr valign="top">
+<td>UK329
+
+<td>30.5
+
+<td>
+
+<td>Te
+
+<td>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>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.]
+
+<td>The concurrency subgroup has revisited this issue and decided that it could
be considered a defect according to the Kona compromise. A task group was
formed lead by Lawrence Crowl <crowl_at_[hidden]> and Bjarne Stroustrup <bs_at_[hidden]>
to write a paper for Frankfort proposing a simple asynchronous launch
@@ -13230,865 +10715,660 @@
Bjarne in c++std-lib-23121: I think that what we agreed was that to avoid
deadlock async() would almost certainly be specified to launch in a
different thread from the thread that executed async(), but I don't think it
- was a specific design constraint.<tr valign="top">
- <td>
- <p>UK<br>
- 330
-
- <td>
- <p align="justify">30.5.1
-
- <td>
- <p align="justify"><br>
-
- <td>
- <p align="justify">Ed
-
- <td>
- <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.
+ was a specific design constraint.
- <td>
- <p align="left">Remove the
- reference to constructible_with_allocator_prefix in 30.5.1
- Remove paragraph 30.5.7
+<tr valign="top">
+<td>UK330
- <p align="left"><br>
+<td>30.5.1
- <td>
- <p>
+<td>
- Related to JP 79 and therefore subset of US 93. Should be addressed under
- the issue corresponding to US 93.<tr valign="top">
- <td>
- <p><a name="JP79">JP 79 </a>
+<td>Ed
- <td>
- <p align="left">30.5.1
+<td>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>
- <p align="left"><br>
+<td>Remove the
+reference to constructible_with_allocator_prefix in 30.5.1
+Remove paragraph 30.5.7
- <td>
- <p>te
+<td>Related to JP 79 and therefore subset of US 93. Should be addressed under
+ the issue corresponding to US 93.
- <td>
- <p align="left" style="margin-top: 0.04in">The
- concept of UsesAllocator and Allocator should be used.
+<tr valign="top">
+<td><a name="JP79">JP79 </a>
- <td>
- <p align="left">
- Correct as follows.
+<td>30.5.1
- <p align="left">
-
+<td>
- <p align="left">
- template <class R, class Alloc>
+<td>te
- <p align="left">
- struct uses_allocator<promise<R>, Alloc>;
+<td>The
+concept of UsesAllocator and Allocator should be used.
- <p align="left">
- template <class R>
+<td>
+Correct as follows.
- <p align="left">
- struct
- constructible_with_allocator_prefix<promise<R>
- >;
+<p>
+
- <p align="left">
-
+<p>
+template <class R, class Alloc>
- <p align="left">
- should be
+<p>
+struct uses_allocator<promise<R>, Alloc>;
- <p align="left">
-
+<p>
+template <class R>
- <p align="left">
- template<class R, Allocator Alloc>
+<p>
+struct
+constructible_with_allocator_prefix<promise<R>
+>;
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">concept_map
- UsesAllocator<promise<R>, Alloc>;
+<p>
+
- <p align="left" style="margin-top: 0.04in">
- <br>
+<p>
+should be
- <td>
- <p>
+<p>
+
- Subset of US 93. Should be addressed under the issue corresponding to US 93.<tr valign="top">
- <td>
- <p>UK<br>
- 331
+<p>
+template<class R, Allocator Alloc>
- <td>
- <p align="justify">30.5.3
+<p>concept_map
+UsesAllocator<promise<R>, Alloc>;
- <td>
- <p align="justify"><br>
+<p>
+<br>
- <td>
- <p align="justify">Te
+<td>Subset of US 93. Should be addressed under the issue corresponding to US 93.
- <td>
- <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.
+<tr valign="top">
+<td>UK331
- <p align="left"><br>
+<td>30.5.3
- <td>
- <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>
- <td>
- <p>
+<td>Te
- Create an issue. Assigned to Detlef. Suggested resolution probably makes
- sense.<tr valign="top">
- <td>
- <p>UK<br>
- 332
+<td>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.
- <td>
- <p align="justify">30.5.4
+<td>Declare the constructor as private with a
+note about intended friendship, or remove the
+exposition-only comment and document the semantics.
- <td>
- <p align="justify"><br>
+<td>Create an issue. Assigned to Detlef. Suggested resolution probably makes
+ sense.
- <td>
- <p align="justify">Ed
+<tr valign="top">
+<td>UK332
- <td>
- <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.
+<td>30.5.4
- <p align="left"><br>
+<td>
- <td>
- <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>Ed
- <td>
- <p>
+<td>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.
- Pass on to editor. Detlef has volunteered to provide some wording.<tr valign="top">
- <td>
- <p>UK<br>
- 333
+<td>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>
- <p align="justify">30.5.4
+<td>Pass on to editor. Detlef has volunteered to provide some wording.
- <td>
- <p align="justify">5
+<tr valign="top">
+<td>UK333
- <td>
- <p align="justify">Ge
+<td>30.5.4
- <td>
- <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>5
- <td>
- <p align="left">Requires fully baked concepts for clause 30
+<td>Ge
- <td>
- <p>
+<td>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.
- Subset of US 93. Should be addressed under the issue corresponding to US 93.<tr valign="top">
- <td>
- <p>UK<br>
- 334
+<td>Requires fully baked concepts for clause 30
- <td>
- <p align="justify">30.5.4
+<td>Subset of US 93. Should be addressed under the issue corresponding to US 93.
- <td>
- <p align="justify">5
+<tr valign="top">
+<td>UK334
- <td>
- <p align="justify">Te
+<td>30.5.4
- <td>
- <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.
+<td>5
- <p align="left"><br>
+<td>Te
- <td>
- <p align="left">Effects: If is_ready() would return false,
- block on the asynchronous result associated with *this.
+<td>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.
- <td>
- <p>
+<td>Effects: If is_ready() would return false,
+block on the asynchronous result associated with *this.
- Create an issue. Move to review, attention: Howard. Proposed resolution is
- fine.<tr valign="top">
- <td>
- <p>UK<br>
- 335
+<td>Create an issue. Move to review, attention: Howard. Proposed resolution is
+ fine.
- <td>
- <p align="justify">30.5.4
+<tr valign="top">
+<td>UK335
- <td>
- <p align="justify"><br>
+<td>30.5.4
- <td>
- <p align="justify">Te
+<td>
- <td>
- <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.
+<td>Te
- <p align="left"><br>
+<td>
+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.
- <td>
- <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>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>
- <p>
+<td>Create an issue. Requires input from Howard. Probably NAD.
- Create an issue. Requires input from Howard. Probably NAD.<tr valign="top">
- <td>
- <p>UK<br>
- 336
+<tr valign="top">
+<td>UK336
- <td>
- <p align="justify">30.5.4
+<td>30.5.4
- <td>
- <p align="justify"><br>
+<td>
- <td>
- <p align="justify">Te
+<td>Te
- <td>
- <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.
+<td>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>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>
- <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>Create an issue. Detlef will look into it.
- <td>
- <p>
+<tr valign="top">
+<td>JP80
- Create an issue. Detlef will look into it.<tr valign="top">
- <td>
- <p>JP 80
+<td>30.5.4 ,<br>
+30.5.5
- <td>
- <p align="left">30.5.4 ,<br>
- 30.5.5
+<td>
- <td>
- <p align="left"><br>
+<td>ed
- <td>
- <p>ed
+<td>
+Typo, duplicated ">"
- <td>
- <p align="left">
- Typo, duplicated ">"
+<p>"class
+Period>>"
- <p align="left" style=
- "margin-top: 0.04in; margin-bottom: 0.04in">"class
- Period>>"
+<p>
+<br>
- <p align="left" style="margin-top: 0.04in">
- <br>
+<td>
+Remove one
- <td>
- <p align="left" style="margin-top: 0.04in">
- Remove one
+<td>Pass on to editor.
- <td>
- <p>
+<tr valign="top">
+<td>UK337
- Pass on to editor.<tr valign="top">
- <td>
- <p>UK<br>
- 337
+<td>30.5.5
- <td>
- <p align="justify">30.5.5
+<td>
- <td>
- <p align="justify"><br>
+<td>Te
- <td>
- <p align="justify">Te
+<td>shared_future
+should support an efficient move constructor that can avoid
+unnecessary manipulation of a reference count, much like
+shared_ptr
- <td>
- <p align="left">shared_future
- should support an efficient move constructor that can avoid
- unnecessary manipulation of a reference count, much like
- shared_ptr
+<td>Add a move constructor
- <p align="left"><br>
+<td>Create an issue. Detlef will look into it.
- <td>
- <p align="left">Add a move constructor
+<tr valign="top">
+<td>UK338
- <td>
- <p>
+<td>30.5.5
- Create an issue. Detlef will look into it.<tr valign="top">
- <td>
- <p>UK<br>
- 338
+<td>
- <td>
- <p align="justify">30.5.5
+<td>Te
- <td>
- <p align="justify"><br>
+<td>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>
- <p align="justify">Te
+<td>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.
- <td>
- <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>Create an issue. Detlef will look into it.
- <td>
- <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.
+<tr valign="top">
+<td>UK339
- <p align="left"><br>
+<td>30.5.6
- <td>
- <p>
+<td>6, 7
- Create an issue. Detlef will look into it.<tr valign="top">
- <td>
- <p>UK<br>
- 339
+<td>Te
- <td>
- <p align="justify">30.5.6
+<td>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>
- <p align="justify">6, 7
+<td>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.
- <td>
- <p align="justify">Te
+<td>Create an issue. Move to review, attention: Howard. Proposed resolution is
+ fine.
- <td>
- <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
+<tr valign="top">
+<td>UK340
- <td>
- <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.
+<td>30.5.6
- <p align="left"><br>
+<td>11, 12, 13
- <td>
- <p>
+<td>Te
- Create an issue. Move to review, attention: Howard. Proposed resolution is
- fine.<tr valign="top">
- <td>
- <p>UK<br>
- 340
+<td>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.
- <td>
- <p align="justify">30.5.6
+<td>Postcondition: *this has no associated
+state.
- <td>
- <p align="justify">11, 12, 13
+<td>Create an issue. Move to review, attention: Howard. Proposed resolution is
+ fine.
- <td>
- <p align="justify">Te
+<tr valign="top">
+<td>UK341
- <td>
- <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.
+<td>30.5.6
- <p align="left"><br>
+<td>
- <td>
- <p align="left">Postcondition: *this has no associated
- state.
+<td>Te
- <td>
- <p>
+<td>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
- Create an issue. Move to review, attention: Howard. Proposed resolution is
- fine.<tr valign="top">
- <td>
- <p>UK<br>
- 341
+<td>Change promise::swap to take an rvalue
+reference.
- <td>
- <p align="justify">30.5.6
+<td>Create an issue. Detlef will look into it. Probably ready as it.
- <td>
- <p align="justify"><br>
+<tr valign="top">
+<td>UK342
- <td>
- <p align="justify">Te
+<td>30.5.6
- <td>
- <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>
- <td>
- <p align="left">Change promise::swap to take an rvalue
- reference.
+<td>Te
- <td>
- <p>
+<td>std::promise is
+missing a non-member overload of swap. This is inconsistent
+with other types that provide a swap member function
- Create an issue. Detlef will look into it. Probably ready as it.<tr valign="top">
- <td>
- <p>UK<br>
- 342
+<td>Add a non-member overload void
+swap(promise&& x,promise&& y){ x.swap(y); }
- <td>
- <p align="justify">30.5.6
+<td>Create an issue. Move to review, attention: Howard. Detlef will also look
+ into it.
- <td>
- <p align="justify"><br>
+<tr valign="top">
+<td>UK343
- <td>
- <p align="justify">Te
+<td>30.5.6
- <td>
- <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
+<td>3
- <p align="left"><br>
+<td>Te
- <td>
- <p align="left">Add a non-member overload void
- swap(promise&& x,promise&& y){ x.swap(y); }
+<td>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>
- <p>
+<td>Remove the
+constructor with the signature template <class
+Allocator> promise(allocator_arg_t, const Allocator&
+a, promise& rhs);
- Create an issue. Move to review, attention: Howard. Detlef will also look
- into it.<tr valign="top">
- <td>
- <p>UK<br>
- 343
+<td>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.
- <td>
- <p align="justify">30.5.6
+<tr valign="top">
+<td>JP81
- <td>
- <p align="justify">3
+<td>30.5.8
- <td>
- <p align="justify">Te
+<td>
- <td>
- <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>ed
- <td>
- <p align="left">Remove the
- constructor with the signature template <class
- Allocator> promise(allocator_arg_t, const Allocator&
- a, promise& rhs);
+<td>
+There are not requirements for F and a concept of Allocator
+dose not use.
- <p align="left"><br>
+<td>
+Correct as follows.
- <td>
- <p>
+<p>
+<br>
- 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>
- <p>JP 81
+<p>
+template <class F>
- <td>
- <p align="left">30.5.8
+<p>
+explicit packaged_task(F f);
- <td>
- <p align="left"><br>
+<p>
+template <class F, class Allocator>
- <td>
- <p>ed
+<p>
+explicit packaged_task(allocator_arg_t, const
+Allocator& a, F f);
- <td>
- <p align="left" style="margin-top: 0.04in">
- There are not requirements for F and a concept of Allocator
- dose not use.
+<p>
+template <class F>
- <td>
- <p align="left">
- Correct as follows.
+<p>
+explicit packaged_task(F&& f);
- <p align="left">
- <br>
+<p>
+template <class F, class Allocator>
- <p align="left">
- template <class F>
+<p>
+explicit packaged_task(allocator_arg_t, const
+Allocator& a, F&& f);
- <p align="left">
- explicit packaged_task(F f);
+<p>
+
- <p align="left">
- template <class F, class Allocator>
+<p>
+should be
- <p align="left">
- explicit packaged_task(allocator_arg_t, const
- Allocator& a, F f);
+<p>
+
- <p align="left">
- template <class F>
+<p>
+template <class F>
- <p align="left">
- explicit packaged_task(F&& f);
+<p>
+<u>requires CopyConstructible<F> &&
+Callable<F, ArgTypes...></u>
- <p align="left">
- template <class F, class Allocator>
+<p>
+&& Convertible<Callable<F,
+ArgTypes...>::result_type, R>
- <p align="left">
- explicit packaged_task(allocator_arg_t, const
- Allocator& a, F&& f);
+<p>
+explicit packaged_task(F f);
- <p align="left">
-
+<p>
+
- <p align="left">
- should be
+<p>
+template <class F, <u>Allocator Alloc</u>>
- <p align="left">
-
+<p>
+<u>requires CopyConstructible<F> &&
+Callable<F, ArgTypes...></u>
- <p align="left">
- template <class F>
+<p>
+&& Convertible<Callable<F,
+ArgTypes...>::result_type, R>
- <p align="left">
- <u>requires CopyConstructible<F> &&
- Callable<F, ArgTypes...></u>
+<p>
+explicit packaged_task(allocator_arg_t, const
+<u>Alloc</u>& a, F f);
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
+<p>
+
- <p align="left">
- explicit packaged_task(F f);
+<p>
+template <class F>
- <p align="left">
-
+<p>
+<u>requires CopyConstructible<F> &&
+Callable<F, ArgTypes...></u>
- <p align="left">
- template <class F, <u>Allocator Alloc</u>>
+<p>
+&& Convertible<Callable<F,
+ArgTypes...>::result_type, R>
- <p align="left">
- <u>requires CopyConstructible<F> &&
- Callable<F, ArgTypes...></u>
+<p>
+explicit packaged_task(F&& f);
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
+<p>
+
- <p align="left">
- explicit packaged_task(allocator_arg_t, const
- <u>Alloc</u>& a, F f);
+<p>
+template <class F, <u>Allocator Alloc</u>>
- <p align="left">
-
+<p>
+<u>requires CopyConstructible<F> &&
+Callable<F, ArgTypes...></u>
- <p align="left">
- template <class F>
+<p>
+&& Convertible<Callable<F,
+ArgTypes...>::result_type, R>
- <p align="left">
- <u>requires CopyConstructible<F> &&
- Callable<F, ArgTypes...></u>
+<p>explicit
+packaged_task(allocator_arg_t, const <u>Alloc</u>& a,
+F&& f);
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
+<td>Subset of US 93. Should be addressed under the issue corresponding to US 93.
+ We do not consider this to be an editorial change.
- <p align="left">
- explicit packaged_task(F&& f);
+<tr valign="top">
+<td>DE23
- <p align="left">
-
+<td>Annex B
- <p align="left">
- template <class F, <u>Allocator Alloc</u>>
+<td>p2
- <p align="left">
- <u>requires CopyConstructible<F> &&
- Callable<F, ArgTypes...></u>
+<td>te
- <p align="left">
- && Convertible<Callable<F,
- ArgTypes...>::result_type, R>
+<td>DE23 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.
- <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>In Annex B, specify a recursion depth of 256 or a larger
+value.
- <td>
- <p>
+<td>Create issue, share with DE 25. See
+ N2826. Attention: core group.
- 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>
- <p>DE-23
+<tr valign="top">
+<td>DE24
- <td>
- <p>Annex B
+<td>Annex B
- <td>
- <p>p2
+<td>p2
- <td>
- <p>te
+<td>te
- <td>
- <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>DE24 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>
- <p>In Annex B, specify a recursion depth of 256 or a larger
- value.
+<td>Add a miminum of 10 placeholders to Annex B.
- <td>
- <p>
+<td>Create issue, proposed resolution as in comment. Attention: LWG subgroup 2.
+ Note the section in N2800 is actually 20.6.12.1.4 [func.bind.place].
- Create issue, share with DE 25. See
- N2826. Attention: core group.<tr valign="top">
- <td>
- <p>DE-24
+<tr valign="top">
+<td>DE25
- <td>
- <p>Annex B
+<td>Annex B
- <td>
- <p>p2
+<td>p2
- <td>
- <p>te
+<td>te
- <td>
- <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>DE25
+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>
- <p>Add a miminum of 10 placeholders to Annex B.
+<td>Remove the bullet "Recursively nested template
+instantiations [17]".
- <td>
- <p>
+<td>Create issue, share with DE 23. Attention: core group.
- Create issue, proposed resolution as in comment. Attention: LWG subgroup 2.
- Note the section in N2800 is actually 20.6.12.1.4 [func.bind.place].<tr valign="top">
- <td>
- <p>DE-25
+<tr valign="top">
+<td>FR38
- <td>
- <p>Annex B
+<td>C.2<br>
+[diffs.<br>
+library]
- <td>
- <p>p2
+<td>1
- <td>
- <p>te
+<td>ed
- <td>
- <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>What is ISO/IEC 1990:9899/DAM
+1? My guess is that's a typo for ISO/IEC
- <td>
- <p>Remove the bullet "Recursively nested template
- instantiations [17]".
+<p>9899/Amd.1:1995 which I'd
+have expected to be referenced here (the tables
- <td>
- <p>
+<p>make reference to things
+which were introduced by Amd.1).
- Create issue, share with DE 23. Attention: core group.<tr valign="top">
- <td>
- <p>FR 38
+<td>One need probably a reference
+to the document which introduce char16_t and
- <td>
- <p>C.2<br>
- [diffs.<br>
- library]
+<p>char32_t in C (ISO/IEC TR 19769:2004?).
- <td>
- <p>1
-
- <td>
- <p>ed
-
- <td>
- <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
+<td>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.
- <p>make reference to things
- which were introduced by Amd.1).
+<tr valign="top">
+<td>UK344
- <td>
- <p>One need probably a reference
- to the document which introduce char16_t and
+<td>Appendix D
- <p>char32_t in C (ISO/IEC TR 19769:2004?).
+<td>
- <td>
- <p>
+<td>Ge
- 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
-
- <td>
- <p align="justify">Appendix D
-
- <td>
- <p align="justify"><br>
-
- <td>
- <p align="justify">Ge
-
- <td>
- <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>
- <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>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>
- <p>
+<td>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.
- Deals with deprecation, needs to be discussed in general group. Attention:
+<td>Deals with deprecation, needs to be discussed in general group. Attention:
Bill Plauger<p>
Update 2009-03-04: Mark as NAD. Compiler switches are outside the domain of
- the standard.<tr valign="top">
- <td>
- <p>FR 39
+ the standard.
- <td>
- <p>Index
+<tr valign="top">
+<td>FR39
- <td>
- <p>
+<td>Index
- <td>
- <p>ed
+<td>
- <td>
- <p>Some definitions seem not
- indexed (such as /trivially copyable/ or
+<td>ed
- <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>Some definitions seem not
+indexed (such as /trivially copyable/ or
- <td>
- <p>
+<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>
- <p>
+<td>
- Pass to the editor.</table><hr>
\ No newline at end of file
+<td> Pass to the editor.
+</table><hr>
\ No newline at end of file
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