Simple Numeric Access

Document number:   N1803=05-0063
Date:   2005-04-18
Project:   Programming Language C++
Reference:   ISO/IEC IS 14882:2003(E)
Reply to:   Pete Becker
  Dinkumware, Ltd.
  petebecker@acm.org


Proposed Wording

Add the following to [lib.string.classes] at the end of the "Header <string> synopsis":

int stoi(string& str, int base = 10);
long stol(string& str, int base = 10);
unsigned long stoul(string& str, int base = 10);
long long stoll(string& str, int base = 10);
unsigned long long stoull(string& str, int base = 10);
float stof(string& str);
double stod(string& str);
long double stold(string& str);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(long double val);
Add the following as a new subclause 21.3.7.10, "Numeric conversions":
int stoi(string& str, int base = 10);
long stol(string& str, int base = 10);
unsigned long stoul(string& str, int base = 10);
long long stoll(string& str, int base = 10);
unsigned long long stoull(string& str, int base = 10);

Effects: the first two functions call strtol(str.c_str(), 0, base), and the last three functions call strtoul(str.c_str(), 0, base), strtoll(str.c_str(), 0, base), and strtoull(str.c_str(), 0, base), respectively. Each returns the converted result, if any, and erases the characters from the front of str that were converted to get the result.

Returns: the converted result.

Throws: invalid_argument if strol, strtoul, strtoll, or strtoull reports that no conversion could be performed. Throws out_of_range if the converted value is outside the range of representable values for the return type.

float stof(string& str);
double stod(string& str);
long double stold(string& str);

Effects: the functions call strtof(str.c_str(), 0), strtod(str.c_str(), 0), and strtold(str.c_str(), 0), respectively, and return the converted result, if any. They erase the characters from the front of str that were converted to get the result.

Returns: the converted result.

Throws: invalid_argument if strof, strtod, or strtold reports that no conversion could be performed. Throws out_of_range if strtof, strtod, or strtold sets errno to ERANGE.

string to_string(long long val);
string to_string(unsigned long long val);
string to_string(long double val);

Returns: each function returns a string object holding the character representation of the value of its argument that would be generated by calling sprintf(buf, fmt, val) with a format specifier of "%lld", "%ulld", or "%f", respectively.

Throws: nothing.