JTC1/SC22/WG21
N0731
Doc.No.: X3J16/95-0131
WG21/N0731
Date: 6 July 1995
Project: Programming Language C++
Reply to: Ichiro Koshida
E-mail: koshida@cc.teu.ac.jp
Japanese Public Review Comments
IPSJ/ITSCJ/SC22 C++WG
1. Introduction
This document presents the comments which are obtained in Japanese
public reviewing process for C++ standard. Thisis not a comprehensive
collection of comments. Rather, they are general or major points that
Japanese national bodyconsiders important, and wishes to discuss in this
meeting.
We have found three major issues in current Working Paper.
a) Implementation dependent extension.
b) String.
c) IOstream.
Followings are discussions about these issues. A detailed explanation of
String issue are described in Appendix.
2. Implementation dependent extension (by Akio Kido)
Category: Technical
Position: [intro.compliance]
Problem:
C standard allows implementation dependent extensions in a conforming
implementation as follows:
A conforming implementation may have extensions (including additional
library functions), provided they do not alterthe behavior of any
strictly conforming program. (In Section 1.7 Compliance)
Current C++ standard does not allow such implementation dependent
extensions.
Recommended Action:
Allow implementation dependent extensions in the same way as C standard.
3. String (by Takanori Adachi)
Category: technical
Problem:
This is a list of comments to the string library as defined inthe latest
WP.All the comments are technical ones that can be separated intothe
following two categories:
1) It is not sufficiently clear which members depend on traits
or not. I think that it is important to add notes to clarify
the traits function names that should be used in the implementation
of each member.
2) There are seven members using charT() as their default arguments.
I think it is problematic in two points: one is on the possibility
of defining eos() as the element which is different from charT().
the other point is on the uncleanness of the dependency on traits.
Proposal:
Detailed comments and proposals are in Appendix.
4.IOstream (by Norihiro Kumagai)
Category: technical
Position: [lib.ios.traits] page 27-7
[lib.stream.types] page 27-7
Problem:
We cannot specify int_type, off_type, pos_type, and state_type
corresponding to some specialized charT type.
For example, if in order to think about 'char' specialization, we
might define
template <class charT> struct ios_traits {
....
typedef charT char_type;
typedef int int_type;
....
};
we would have to accept it as constant definition in all of the
specialized traits, not only ios_traits<char>, but
ios_traits<wchar_t>, ios_traits<ultrachar>. It would lead to the
restriction upon implementations that all of the charT have to be
converted in 'int' range. The restriction is too heave to future
wide character types and user-defined character types.
Proposed_action:
Adopt the following definition:
=============================
namespace std {
template <class charT> struct ios_traits<charT> {}
struct ios_traits<char> {
typedef char char_type;
typedef int int_type;
typedef streampos pos_type;
typedef streamoff off_type;
typedef mbstate_t state_type;
// 27.4.2.2 values:
static char_type eos();
static int_type eof();
static int_type not_eof(char_type c);
static char_type newline();
static size_t length(const char_type* s);
// 27.4.2.3 tests:
static bool eq_char_type(char_type, char_type);
static bool eq_int_type(int_type, int_type);
static bool is_eof(int_type);
static bool is_whitespace(const ctype<char_type> ctype&, char_type);
// 27.4.2.4 conversions:
static char_type to_char_type(int_type);
static int_type to_int_type(char_type);
static char_type* copy(char_type* dst, const char* src, size_t n);
static state_type get_state(pos_type);
static pos_type get_pos(streampos fpos, state_type state);
};
struct ios_traits<wchar_t> {
typedef wchar_t char_type;
typedef wint_t int_type;
typedef wstreampos pos_type;
typedef wstreamoff off_type;
typedef mbstate_t state_type;
// 27.4.2.2 values:
static char_type eos();
static int_type eof();
static int_type not_eof(char_type c);
static char_type newline();
static size_t length(const char_type* s);
// 27.4.2.3 tests:
static bool eq_char_type(char_type, char_type);
static bool eq_int_type(int_type, int_type);
static bool is_eof(int_type);
static bool is_whitespace(const ctype<char_type> ctype&, char_type);
// 27.4.2.4 conversions:
static char_type to_char_type(int_type);
static int_type to_int_type(char_type);
static char_type* copy(char_type* dst, const char* src, size_t n);
static state_type get_state(pos_type);
static pos_type get_pos(streampos fpos, state_type state);
};
}
=========================
According to the separation of the two specializations, we have to
change the descriptions in [lib.streams.types], as follows;
## IN THE FOLLOWING DESCRIPTION, I APPENDED 'diff-mark' AT THE HEAD OF
## EACH LINES.
=======================
27.4.1 Types
typedef OFF_T streamoff;
The type streamoff is an implementation-defined type that satisfies
the requirements of type OFF_T.
! typedef WOFF_T wstreamoff;
The type wstreamoff is an implementation-defined type that satisfies
! the requirements of type WOFF_T.
typedef POS_T streampos;
The type streampos is an implementation-defined type that satisfies
the requirements of type POS_T.
! typedef WPOS_T wstreampos;
The type wstreampos is an implementation-defined type that satisfies
! the requirements of type WPOS_T.
! typedef SIZE_T streamsize;
===================
The type streamsize is a synonym for one of the signed basic
integral types. It is used to represent the number of characters
transferred in an I/O operations, or the size of I/O buffers.
Ccomment
We can find the above approach, "defining nothing in the template
version of traits and defining everything in each specializations", in
my original proposal(X3J16/94-0083). I am afraid (and sorry) that one
of my mistakes made in my document for Austin(X1J16/95-0064) caused to
introduce such the inapproplate definitions to the current WP.
I feel this change request is in a kind of 'editorial' class.
We should not put any definitions(static member functions or typedefs)
related to int_type, off_type, pos_type and/or state_type in the
template definition of the traits. The reason is that in fact these
three types depend on the template parameter class 'charT' for variety
of environments(ASCII, stateless encodings for double byte characters,
UniCode). For example,
charT char wchar_t
int_type int wint_t
off_type streamoff wstreamoff
pos_type streampos wstreampos
state_type mbstate_t mbstate_t
Note that the two of the above types, 'wint_t', 'mbstate_t' are
defined in C Amendment 1 (or MSE).
We cannot assume that two implementation-defined types, streampos and
wstreampos have the same definitions because under some shift
encodings, wstreampos have to keep an additional information, the
shift state, as well as the file position. we should represent them
with two different symbols, POS_T and WPOS_T so as to give a chance to
provide separate definitions in these two specializations.
For pos_type in both specialized traits, the type 'mbstate_t' is
introduced from C Amendment 1(or former MSE) and is an
implementation-defined type enough to represent any of shift states in
file encodings.
The type, INT_T is not suitable for the definition of streamsize
because INT_T represents another character type, whose meaning is
different to those of streampos. So a new symbol 'SIZE_T' will need
to specify the definitions of streampos.
Appendix
Detailed comments to
______________________________________________________________________
21 Strings library [lib.strings]
______________________________________________________________________
by taka@miwa.co.jp
Version: July/5/95
21.1.1.2 string_char_traits [lib.string.char.traits.members]
members
!begin
!category: technical
!problem:
An explaination for the implementation requirement has not been provided.
!proposed_action:
Provide the explaination, "the following default defintions, except
char_in, char_out, and is_del, are supposed to implement as
inline members." immediately after the line:
1 Default definitions.
!end
21.1.1.3 Template class basic_string [lib.basic.string]
!begin
!category: technical
!problem:
The usage of charT() as default arguments are not adequate in the
following seven members:
basic_string& append(size_type n, charT c = charT());
basic_string& assign(size_type n, charT c = charT());
basic_string& insert(size_type pos, size_type n, charT c = charT() );
iterator insert(iterator p, charT c = charT());
iterator insert(iterator p, size_type n, charT c = charT());
basic_string& replace(size_type pos, size_type n, charT c = charT());
basic_string& replace(iterator i1, iterator i2,
size_type n, charT c = charT());
!proposed_action:
The default arguments charT() should be eliminated by separating
those members into two forms respectively and by using traits::eos()
instead of charT() as the followings:
basic_string& append(size_type n, charT c);
basic_string& append(size_type n);
basic_string& assign(size_type n, charT c);
basic_string& assign(size_type n);
basic_string& insert(size_type pos, size_type n, charT c);
basic_string& insert(size_type pos, size_type n);
iterator insert(iterator p, charT c);
iterator insert(iterator p);
iterator insert(iterator p, size_type n, charT c);
iterator insert(iterator p, size_type n);
basic_string& replace(size_type pos, size_type n, charT c);
basic_string& replace(size_type pos, size_type n);
basic_string& replace(iterator i1, iterator i2,
size_type n, charT c);
basic_string& replace(iterator i1, iterator i2,
size_type n);
!end
21.1.1.4 basic_string constructors [lib.string.cons]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string(const basic_string<charT,traits,Allocator>& str,
size_type pos = 0, size_type n = npos,
Allocator& = Allocator());
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string(const charT* s, size_type n,
Allocator& = Allocator());
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string(const charT* s, Allocator& = Allocator());
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::copy().
~~~~~~~~~~~~~~~~~~
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string(size_type n, charT c, Allocator& = Allocator());
!proposed_action:
Add notes like:
Notes:
Uses traits::assign().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
operator=(const basic_string<charT,traits,Allocator>& str);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
operator=(const charT* s);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::copy().
~~~~~~~~~~~~~~~~~~
!end
basic_string<charT,traits,Allocator>& operator=(charT c);
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>& operator=(charT c);
!proposed_action:
Add notes like:
Notes:
Uses traits::assign().
!end
21.1.1.8.1 basic_string::operator+= [lib.string::op+=]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
operator+=(const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>& operator+=(const charT* s);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::copy().
~~~~~~~~~~~~~~~~~~
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>& operator+=(charT c);
!proposed_action:
Add notes like:
Notes:
Uses traits::assign().
!end
21.1.1.8.2 basic_string::append [lib.string::append]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
append(const basic_string<charT,traits,Allocator>& str, size_type pos = 0,
size_type n = npos);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
append(const charT* s, size_type n);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>& append(const charT* s);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::copy().
~~~~~~~~~~~~~~~~~~
!end
basic_string<charT,traits,Allocator>&
append(size_type n, charT c = charT());
!begin
!category: technical
!problem:
The usage of charT() as a default argument will become not adequate
when the non-default null character is defined in the traits.
!proposed_action:
Remove the default argument like
basic_string<charT,traits,Allocator>&
append(size_type n, charT c);
and add a new member with the following signature:
basic_string<charT,traits,Allocator>&
append(size_type n);
Returns:
append(n,traits::eos()).
Notes:
Uses traits::eos() and traits::assign().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
append(size_type n, charT c);
!proposed_action:
Add notes like:
Notes:
Uses traits::assign().
!end
21.1.1.8.3 basic_string::assign [lib.string::assign]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
assign(const basic_string<charT,traits>& str, size_type pos = 0,
size_type n = npos);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
assign(const charT* s, size_type n);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>& assign(const charT* s);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::copy().
~~~~~~~~~~~~~~~~~~
!end
basic_string<charT,traits,Allocator>&
assign(size_type n, charT c = charT());
!begin
!category: technical
!problem:
The usage of charT() as a default argument will become not adequate
when the non-default null character is defined in the traits.
!proposed_action:
Remove the default argument like
basic_string<charT,traits,Allocator>&
assign(size_type n, charT c);
and add a new member with the following signature:
basic_string<charT,traits,Allocator>&
assign(size_type n);
Returns:
assign(n,traits::eos()).
Notes:
Uses traits::eos() and traits::assign().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
assign(size_type n, charT c);
!proposed_action:
Add notes like:
Notes:
Uses traits::assign().
!end
21.1.1.8.4 basic_string::insert [lib.string::insert]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
insert(size_type pos1,
const basic_string<charT,traits,Allocator>& str,
size_type pos2 = 0, size_type n = npos);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
insert(size_type pos, const charT* s, size_type n);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
insert(size_type pos, const charT* s);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::copy().
~~~~~~~~~~~~~~~~~~
!end
basic_string<charT,traits,Allocator>&
insert(size_type pos, size_type n, charT c = charT());
!begin
!category: technical
!problem:
The usage of charT() as a default argument will become not adequate
when the non-default null character is defined in the traits.
!proposed_action:
Remove the default argument like
basic_string<charT,traits,Allocator>&
insert(size_type pos, size_type n, charT c);
and add a new member with the following signature:
basic_string<charT,traits,Allocator>&
insert(size_type pos, size_type n);
Returns:
insert(pos, n, tratis::eos()).
Notes:
Uses traits::eos() and traits::assign().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
insert(size_type pos, size_type n, charT c);
!proposed_action:
Add notes like:
Notes:
Uses traits::assign().
!end
iterator insert(iterator p, charT c = charT());
!begin
!category: technical
!problem:
The usage of charT() as a default argument will become not adequate
when the non-default null character is defined in the traits.
!proposed_action:
Remove the default argument like
iterator insert(iterator p, charT c);
and add a new member with the following signature:
iterator insert(iterator p);
Requires:
p is a valid iterator on *this.
Effects:
inserts a copy of traits::eos() before the character referred to by p.
Returns:
p.
Notes:
Uses traits::eos().
!end
iterator insert(iterator p, size_type n, charT c = charT());
!begin
!category: technical
!problem:
The usage of charT() as a default argument will become not adequate
when the non-default null character is defined in the traits.
!proposed_action:
Remove the default argument like
iterator insert(iterator p, size_type n, charT c);
and add a new member with the following signature:
iterator insert(iterator p, size_type n);
Requires:
p is a valid iterator on *this.
Effects:
inserts n copies of traits::eos() before the character referrred to by p.
Returns:
p.
Notes:
Uses traits::eos().
!end
21.1.1.8.5 basic_string::remove [lib.string::remove]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
remove(size_type pos = 0, size_type n = npos);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
21.1.1.8.6 basic_string::replace [lib.string::replace]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
replace(size_type pos1, size_type n1,
const basic_string<charT,traits,Allocator>& str,
size_type pos2 = 0, size_type n2 = npos);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
replace(size_type pos, size_type n1, const charT* s, size_type n2);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
replace(size_type pos, size_type n1, const charT* s);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::copy().
~~~~~~~~~~~~~~~~~~
!end
basic_string<charT,traits,Allocator>&
replace(size_type pos, size_type n, charT c = charT());
!begin
!category: technical
!problem:
The usage of charT() as a default argument will become not adequate
when the non-default null character is defined in the traits.
!proposed_action:
Remove the default argument like
basic_string<charT,traits,Allocator>&
replace(size_type pos, size_type n, charT c);
and add a new member with the following signature:
basic_string<charT,traits,Allocator>&
replace(size_type pos, size_type n);
Returns:
replace(pos,n,traits::eos()).
Notes:
Uses traits::eos().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>&
replace(size_type pos, size_type n, charT c);
!proposed_action:
Add notes like:
Notes:
Uses traits::assign().
!end
basic_string& replace(iterator i1, iterator i2, size_type n,
charT c = charT());
!begin
!category: technical
!problem:
The usage of charT() as a default argument will become not adequate
when the non-default null character is defined in the traits.
!proposed_action:
Remove the default argument like
basic_string& replace(iterator i1, iterator i2, size_type n, charT c);
and add a new member with the following signature:
basic_string& replace(iterator i1, iterator i2, size_type n);
Returns:
replace(i1,i2,n,traits::eos()).
Notes:
Length change: n - (i2 - i1).
Uses traits::eos().
!end
21.1.1.8.7 basic_string::copy [lib.string::copy]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type copy(charT* s, size_type n, size_type pos = 0);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
21.1.1.9.1 basic_string::find [lib.string::find]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find(const charT* s, size_type pos, size_type n) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find(const charT* s, size_type pos = 0) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::eq().
~~~~~~~~~~~~~~~~
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find(charT c, size_type pos = 0) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
21.1.1.9.2 basic_string::rfind [lib.string::rfind]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type rfind(const charT* s, size_type pos, size_type n) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type rfind(const charT* s, size_type pos = npos) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::eq().
~~~~~~~~~~~~~~~~
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type rfind(charT c, size_type pos = npos) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
21.1.1.9.3 [lib.string::find.first.of]
basic_string::find_first_of
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type
find_first_of(const charT* s, size_type pos, size_type n) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find_first_of(const charT* s, size_type pos = 0) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::eq().
~~~~~~~~~~~~~~~~
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find_first_of(charT c, size_type pos = 0) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
21.1.1.9.4 basic_string::find_last_of [lib.string::find.last.of]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find_last_of(const charT* s, size_type pos, size_type n) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find_last_of(const charT* s, size_type pos = npos) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::eq().
~~~~~~~~~~~~~~~~
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find_last_of(charT c, size_type pos = npos) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
21.1.1.9.5 [lib.string::find.first.not.of]
basic_string::find_first_not_of
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type
find_first_not_of(const charT* s, size_type pos, size_type n) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find_first_not_of(const charT* s, size_type pos = 0) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::eq().
~~~~~~~~~~~~~~~~
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find_first_not_of(charT c, size_type pos = 0) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
21.1.1.9.6 [lib.string::find.last.not.of]
basic_string::find_last_not_of
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find_last_not_of(const charT* s, size_type pos,
size_type n) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find_last_not_of(const charT* s, size_type pos = npos) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::eq().
~~~~~~~~~~~~~~~~
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
size_type find_last_not_of(charT c, size_type pos = npos) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::eq().
!end
21.1.1.9.7 basic_string::substr [lib.string::substr]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
basic_string<charT,traits,Allocator>
substr(size_type pos = 0, size_type n = npos) const;
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
21.1.1.10.1 operator+ [lib.string::op+]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
basic_string<charT,traits,Allocator>
operator+(const basic_string<charT,traits,Allocator>& lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
basic_string<charT,traits,Allocator>
operator+(const charT* lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::copy().
~~~~~~~~~~~~~~~~~~
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
basic_string<charT,traits,Allocator>
operator+(charT lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
basic_string<charT,traits,Allocator>
operator+(const basic_string<charT,traits,Allocator>& lhs,
const charT* rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::copy().
~~~~~~~~~~~~~~~~~~
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
basic_string<charT,traits,Allocator>
operator+(const basic_string<charT,traits,Allocator>& lhs,
charT rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::copy().
!end
21.1.1.10.2 operator== [lib.string::operator==]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator==(const basic_string<charT,traits,Allocator>& lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator==(const charT* lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator==(const basic_string<charT,traits,Allocator>& lhs,
const charT* rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
~~~~~~~~~~~~~~~~~~~~~
!end
21.1.1.10.3 operator!= [lib.string::op!=]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator!=(const charT* lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
const charT* rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
~~~~~~~~~~~~~~~~~~~~~
!end
21.1.1.10.4 operator< [lib.string::op<]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator< (const basic_string<charT,traits,Allocator>& lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator< (const charT* lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator< (const basic_string<charT,traits,Allocator>& lhs,
const charT* rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
!end
21.1.1.10.5 operator> [lib.string::op>]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator> (const basic_string<charT,traits,Allocator>& lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator> (const charT* lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator> (const basic_string<charT,traits,Allocator>& lhs,
const charT* rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
!end
21.1.1.10.6 operator<= [lib.string::op<=]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator<=(const charT* lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
const charT* rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
!end
21.1.1.10.7 operator>= [lib.string::op>=]
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator>=(const charT* lhs,
const basic_string<charT,traits,Allocator>& rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
!end
!begin
!category: technical
!problem:
Missing notes concerning the usage of traits members for:
template<class charT, class traits, class Allocator>
bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
const charT* rhs);
!proposed_action:
Add notes like:
Notes:
Uses traits::length() and traits::compare().
!end