std::string
Revision 1Document number: | N1981=06-0051 |
Date: | 2006-04-05 |
Project: | Programming Language C++ |
Reference: | ISO/IEC IS 14882:2003(E) |
Reply to: | Pete Becker |
Roundhouse Consulting, Ltd. | |
petebecker@acm.org |
There are several places in the C++ Standard Library where we use char*
strings in the interface; in each of these places we can add an overload that takes
an object of type std::string
.
string
arguments to const string&
throughout.
In [lib.locale], 22.1.1, add the following constructors:
explicit locale(const string& std_name); locale(const locale& other, const string& std_name, category);
In [lib.locale.cons], 22.1.1.2, after the entry for explicit locale(const
char * std_name)
, add the following:
Effects: the same asexplicit locale(const string& std_name);
locale(std_name.c_str())
.
In [lib.locale.cons], 22.1.1.2, after the entry for locale(const locale&
other, const char* std_name, category)
, add the following:
Effects: the same aslocale(const locale& other, const string& std_name, category cat);
locale(other, std_name.c_str(), cat)
.
In [lib.locale.facet], 22.1.1.1.2, paragraph 4, after the sentence "Each such facet
provides a constructor that takes a const char*
argument, which names
the locale, and a refs argument, which is passed to the base class constructor"
add the following sentence:
Each such facet also provides a constructor that takes astring
argument str and a refs argument, which has the same effect as calling the first constructor with the two argumentsstr.c_str()
andrefs
.
In [lib.locale.ctype.byname], 22.2.1.2, after the declaration of the constructor, add the following constructor:
explicit ctype_byname(const string&, size_t refs = 0);
In [lib.locale.codecvt.byname], 22.2.1.5, after the declaration of the constructor, add the following constructor:
explicit codecvt_byname(const string&, size_t refs = 0);
In [lib.locale.numpunct.byname], 22.2.3.2, after the declaration of the constructor, add the following constructor:
explicit numpunct_byname(const string&, size_t refs = 0);
In [lib.locale.collate.byname], 22.2.4.2, after the declaration of the constructor, add the following constructor:
explicit collate_byname(const string&, size_t refs = 0);
In [lib.locale.time.get.byname], 22.2.5.2, after the declaration of the constructor, add the following constructor:
explicit time_get_byname(const string&, size_t refs = 0);
In [lib.locale.time.put.byname], 22.2.5.4, after the declaration of the constructor, add the following constructor:
explicit time_put_byname(const string&, size_t refs = 0);
In [lib.locale.moneypunct.byname], 22.2.6.4, after the declaration of the constructor, add the following constructor:
explicit moneypunct_byname(const string&, size_t refs = 0);
In [lib.locale.messages.byname], 22.2.7.2, after the declaration of the constructor, add the following constructor:
explicit messages_byname(const string&, size_t refs = 0);
In [lib.filebuf], 27.8.1.1, add the following declaration after the declaration of
the member function open
:
basic_filebuf
*open(const string& s, ios_base::openmode mode);
In [lib.filebuf.members], 27.8.1.3, add the following after paragraph 5:
basic_filebuf
*open(const string& s, ios_base::openmode mode); Returns:
open(s.c_str(), mode);
In [lib.ifstream], 27.8.1.5, add the following declarations to the declaration of
basic_ifstream
:
explicit basic_ifstream(const string& s, ios_base::openmode mode = ios_base::in); void open(const string& s, ios_base::openmode mode = ios_base::in);
At the end of [lib.ifstream.cons], 27.8.1.6, add the following:
explicit basic_ifstream(const string& s, ios_base::openmode mode = ios_base::in);
Effects: the same as
basic_ifstream(s.c_str(), mode);
In [lib.ifstream.members], 27.8.1.7, after the entry for open
, add
the following:
void open(const string& s, ios_base::openmode mode = ios_base::in);
Effects: calls open(s.c_str(), mode);
In [lib.ofstream], 27.8.1.8, add the following declarations to the declaration of
basic_ofstream
:
explicit basic_ofstream(const string& s, ios_base::openmode mode = ios_base::out); void open(const string& s, ios_base::openmode mode = ios_base::out);
At the end of [lib.ofstream.cons], 27.8.1.9, add the following:
explicit basic_ofstream(const string& s, ios_base::openmode mode = ios_base::out);
Effects: the same as
basic_ofstream(s.c_str(), mode);
In [lib.ofstream.members], 27.8.1.10, after the entry for open
, add
the following:
void open(const string& s, ios_base::openmode mode = ios_base::out);
Effects: calls
open(s.c_str(), mode);
In [lib.fstream], 27.8.1.11, add the following declarations to the declaration of
basic_fstream
:
explicit basic_fstream(const string& s, ios_base::openmode mode = ios_base::in | ios_base::out); void open(const string& s, ios_base::openmode mode = ios_base::in | ios_base::out);
At the end of [lib.fstream.cons], 27.8.1.12, add the following:
explicit basic_fstream(const string& s, ios_base::openmode mode = ios_base::in | ios_base::out);
Effects: the same as
basic_fstream(s.c_str(), mode);
In [lib.fstream.members], 27.8.1.13, after the entry for open
, add
the following:
void open(const string& s, ios_base::openmode mode = ios_base::in | ios_base::out);
Effects: calls
open(s.c_str(), mode);