This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++11 status.

### 1261. Insufficent overloads for `to_string` / `to_wstring`

Section: 21.3.5 [string.conversions] Status: C++11 Submitter: Christopher Jefferson Opened: 2009-11-10 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [string.conversions].

View all issues with C++11 status.

Discussion:

Reported on the gcc mailing list.

> The code "`int i; to_string(i);`" fails to compile, as '`int`' is ambiguous between '`long long`' and '`long long unsigned`'. It seems unreasonable to expect users to cast numbers up to a larger type just to use `to_string`.

[ 2009-11-14 Moved to Tentatively Ready after 5 positive votes on c++std-lib. ]

Proposed resolution:

21.3 [string.classes], change `to_string` and `to_wstring` to:

>     string to_string(int val);
>     string to_string(unsigned val);
>     string to_string(long val);
>     string to_string(unsigned long val);
>     string to_string(long long val);
>     string to_string(unsigned long long val);
>     string to_string(float val);
>     string to_string(double val);
>     string to_string(long double val);

>     wstring to_wstring(int val);
>     wstring to_wstring(unsigned val);
>     wstring to_wstring(long val);
>     wstring to_wstring(unsigned long val);
>     wstring to_wstring(long long val);
>     wstring to_wstring(unsigned long long val);
>     wstring to_wstring(float val);
>     wstring to_wstring(double val);
>     wstring to_wstring(long double val);

In 21.3.5 [string.conversions], paragraph 7, change to:

>     string to_string(int val);
>     string to_string(unsigned val);
>     string to_string(long val);
>     string to_string(unsigned long val);
>     string to_string(long long val);
>     string to_string(unsigned long long val);
>     string to_string(float val);
>     string to_string(double val);
>     string to_string(long double val);

> > 7 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 `"%d"`, `"%u"`, `"%ld"`, `"%lu"`, `"%lld"`, `"%llu"`, `"%f"`, `"%f"`, or `"%Lf"`, respectively, where `buf` designates an internal character buffer of sufficient size.

In 21.3.5 [string.conversions], paragraph 14, change to:

>     wstring to_wstring(int val);
>     wstring to_wstring(unsigned val);
>     wstring to_wstring(long val);
>     wstring to_wstring(unsigned long val);
>     wstring to_wstring(long long val);
>     wstring to_wstring(unsigned long long val);
>     wstring to_wstring(float val);
>     wstring to_wstring(double val);
>     wstring to_wstring(long double val);

> > 14 Returns: Each function returns a `wstring` object holding the character representation of the value of its argument that would be generated by calling `swprintf(buf, buffsz, fmt, val)` with a format specifier of `L"%d"`, `L"%u"`, `L"%ld"`, `L"%lu"`, `L"%lld"`, `L"%llu"`, `L"%f"`, `L"%f"`, or `L"%Lf"`, respectively, where `buf` designates an internal character buffer of sufficient size `buffsz`.