[string.conversions]

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@105336 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/string b/include/string
index 15713f0..3428fb8 100644
--- a/include/string
+++ b/include/string
@@ -95,12 +95,14 @@
     explicit basic_string(const allocator_type& a = allocator_type());
     basic_string(const basic_string& str);
     basic_string(basic_string&& str);
-    basic_string(const basic_string& str, size_type pos, size_type n = npos, const allocator_type& a = allocator_type());
+    basic_string(const basic_string& str, size_type pos, size_type n = npos,
+                 const allocator_type& a = allocator_type());
     basic_string(const_pointer s, const allocator_type& a = allocator_type());
     basic_string(const_pointer s, size_type n, const allocator_type& a = allocator_type());
     basic_string(size_type n, value_type c, const allocator_type& a = allocator_type());
     template<class InputIterator>
-        basic_string(InputIterator begin, InputIterator end, const allocator_type& a = allocator_type());
+        basic_string(InputIterator begin, InputIterator end,
+                     const allocator_type& a = allocator_type());
     basic_string(initializer_list<value_type>, const Allocator& = Allocator());
     basic_string(const basic_string&, const Allocator&);
     basic_string(basic_string&&, const Allocator&);
@@ -156,7 +158,8 @@
     basic_string& append(const_pointer s, size_type n);
     basic_string& append(const_pointer s);
     basic_string& append(size_type n, value_type c);
-    template<class InputIterator> basic_string& append(InputIterator first, InputIterator last);
+    template<class InputIterator>
+        basic_string& append(InputIterator first, InputIterator last);
     basic_string& append(initializer_list<value_type>);
 
     void push_back(value_type c);
@@ -171,17 +174,20 @@
     basic_string& assign(const_pointer s, size_type n);
     basic_string& assign(const_pointer s);
     basic_string& assign(size_type n, value_type c);
-    template<class InputIterator> basic_string& assign(InputIterator first, InputIterator last);
+    template<class InputIterator>
+        basic_string& assign(InputIterator first, InputIterator last);
     basic_string& assign(initializer_list<value_type>);
 
     basic_string& insert(size_type pos1, const basic_string& str);
-    basic_string& insert(size_type pos1, const basic_string& str, size_type pos2, size_type n);
+    basic_string& insert(size_type pos1, const basic_string& str,
+                         size_type pos2, size_type n);
     basic_string& insert(size_type pos, const_pointer s, size_type n);
     basic_string& insert(size_type pos, const_pointer s);
     basic_string& insert(size_type pos, size_type n, value_type c);
     iterator      insert(const_iterator p, value_type c);
     iterator      insert(const_iterator p, size_type n, value_type c);
-    template<class InputIterator> iterator insert(const_iterator p, InputIterator first, InputIterator last);
+    template<class InputIterator>
+        iterator insert(const_iterator p, InputIterator first, InputIterator last);
     iterator      insert(const_iterator p, initializer_list<value_type>);
 
     basic_string& erase(size_type pos = 0, size_type n = npos);
@@ -189,7 +195,8 @@
     iterator      erase(const_iterator first, const_iterator last);
 
     basic_string& replace(size_type pos1, size_type n1, const basic_string& str);
-    basic_string& replace(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2);
+    basic_string& replace(size_type pos1, size_type n1, const basic_string& str,
+                          size_type pos2, size_type n2);
     basic_string& replace(size_type pos, size_type n1, const_pointer s, size_type n2);
     basic_string& replace(size_type pos, size_type n1, const_pointer s);
     basic_string& replace(size_type pos, size_type n1, size_type n2, value_type c);
@@ -197,7 +204,8 @@
     basic_string& replace(iterator i1, iterator i2, const_pointer s, size_type n);
     basic_string& replace(iterator i1, iterator i2, const_pointer s);
     basic_string& replace(iterator i1, iterator i2, size_type n, value_type c);
-    template<class InputIterator> basic_string& replace(iterator i1, iterator i2, InputIterator j1, InputIterator j2);
+    template<class InputIterator>
+        basic_string& replace(iterator i1, iterator i2, InputIterator j1, InputIterator j2);
     basic_string& replace(iterator i1, iterator i2, initializer_list<value_type>);
 
     size_type copy(pointer s, size_type n, size_type pos = 0) const;
@@ -242,7 +250,8 @@
 
     int compare(const basic_string& str) const;
     int compare(size_type pos1, size_type n1, const basic_string& str) const;
-    int compare(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2) const;
+    int compare(size_type pos1, size_type n1, const basic_string& str,
+                size_type pos2, size_type n2) const;
     int compare(const_pointer s) const;
     int compare(size_type pos1, size_type n1, const_pointer s) const;
     int compare(size_type pos1, size_type n1, const_pointer s, size_type n2) const;
@@ -252,7 +261,8 @@
 
 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);
+operator+(const basic_string<charT, traits, Allocator>& lhs,
+          const basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
 basic_string<charT, traits, Allocator>
@@ -271,7 +281,8 @@
 operator+(const basic_string<charT, traits, Allocator>& lhs, charT rhs);
 
 template<class charT, class traits, class Allocator>
-bool operator==(const basic_string<charT, traits, Allocator>& lhs, const basic_string<charT, traits, Allocator>& rhs);
+bool operator==(const basic_string<charT, traits, Allocator>& lhs,
+                const basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
 bool operator==(const charT* lhs, const basic_string<charT, traits, Allocator>& rhs);
@@ -280,7 +291,8 @@
 bool operator==(const basic_string<charT,traits,Allocator>& lhs, const charT* rhs);
 
 template<class charT, class traits, class Allocator> 
-bool operator!=(const basic_string<charT,traits,Allocator>& lhs, const basic_string<charT, traits, Allocator>& rhs);
+bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
+                const basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
 bool operator!=(const charT* lhs, const basic_string<charT, traits, Allocator>& rhs);
@@ -289,7 +301,8 @@
 bool operator!=(const basic_string<charT, traits, Allocator>& lhs, const charT* rhs);
 
 template<class charT, class traits, class Allocator>
-bool operator< (const basic_string<charT, traits, Allocator>& lhs, const basic_string<charT, traits, Allocator>& rhs);
+bool operator< (const basic_string<charT, traits, Allocator>& lhs,
+                const basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
 bool operator< (const basic_string<charT, traits, Allocator>& lhs, const charT* rhs);
@@ -298,7 +311,8 @@
 bool operator< (const charT* lhs, const basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
-bool operator> (const basic_string<charT, traits, Allocator>& lhs, const basic_string<charT, traits, Allocator>& rhs);
+bool operator> (const basic_string<charT, traits, Allocator>& lhs,
+                const basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
 bool operator> (const basic_string<charT, traits, Allocator>& lhs, const charT* rhs);
@@ -307,7 +321,8 @@
 bool operator> (const charT* lhs, const basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
-bool operator<=(const basic_string<charT, traits, Allocator>& lhs, const basic_string<charT, traits, Allocator>& rhs);
+bool operator<=(const basic_string<charT, traits, Allocator>& lhs,
+                const basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
 bool operator<=(const basic_string<charT, traits, Allocator>& lhs, const charT* rhs);
@@ -316,7 +331,8 @@
 bool operator<=(const charT* lhs, const basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
-bool operator>=(const basic_string<charT, traits, Allocator>& lhs, const basic_string<charT, traits, Allocator>& rhs);
+bool operator>=(const basic_string<charT, traits, Allocator>& lhs,
+                const basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
 bool operator>=(const basic_string<charT, traits, Allocator>& lhs, const charT* rhs);
@@ -325,7 +341,8 @@
 bool operator>=(const charT* lhs, const basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
-void swap(basic_string<charT, traits, Allocator>& lhs, basic_string<charT, traits, Allocator>& rhs);
+void swap(basic_string<charT, traits, Allocator>& lhs,
+          basic_string<charT, traits, Allocator>& rhs);
 
 template<class charT, class traits, class Allocator>
 basic_istream<charT, traits>&
@@ -337,7 +354,8 @@
 
 template<class charT, class traits, class Allocator>
 basic_istream<charT, traits>& 
-getline(basic_istream<charT, traits>& is, basic_string<charT, traits, Allocator>& str, charT delim);
+getline(basic_istream<charT, traits>& is, basic_string<charT, traits, Allocator>& str,
+        charT delim);
 
 template<class charT, class traits, class Allocator>
 basic_istream<charT, traits>&
@@ -345,6 +363,48 @@
 
 typedef basic_string<char>    string;
 typedef basic_string<wchar_t> wstring;
+typedef basic_string<char16_t> u16string;
+typedef basic_string<char32_t> u32string;
+
+int                stoi  (const string& str, size_t* idx = 0, int base = 10);
+long               stol  (const string& str, size_t* idx = 0, int base = 10);
+unsigned long      stoul (const string& str, size_t* idx = 0, int base = 10);
+long long          stoll (const string& str, size_t* idx = 0, int base = 10);
+unsigned long long stoull(const string& str, size_t* idx = 0, int base = 10);
+
+float       stof (const string& str, size_t* idx = 0);
+double      stod (const string& str, size_t* idx = 0);
+long double stold(const string& str, size_t* idx = 0);
+
+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);
+
+int                stoi  (const wstring& str, size_t* idx = 0, int base = 10);
+long               stol  (const wstring& str, size_t* idx = 0, int base = 10);
+unsigned long      stoul (const wstring& str, size_t* idx = 0, int base = 10);
+long long          stoll (const wstring& str, size_t* idx = 0, int base = 10);
+unsigned long long stoull(const wstring& str, size_t* idx = 0, int base = 10);
+
+float       stof (const wstring& str, size_t* idx = 0);
+double      stod (const wstring& str, size_t* idx = 0);
+long double stold(const wstring& str, size_t* idx = 0);
+
+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);
 
 template <> struct hash<string>;
 template <> struct hash<u16string>;
@@ -3449,6 +3509,46 @@
 
 #endif
 
+int                stoi  (const string& __str, size_t* __idx = 0, int __base = 10);
+long               stol  (const string& __str, size_t* __idx = 0, int __base = 10);
+unsigned long      stoul (const string& __str, size_t* __idx = 0, int __base = 10);
+long long          stoll (const string& __str, size_t* __idx = 0, int __base = 10);
+unsigned long long stoull(const string& __str, size_t* __idx = 0, int __base = 10);
+
+float       stof (const string& __str, size_t* __idx = 0);
+double      stod (const string& __str, size_t* __idx = 0);
+long double stold(const string& __str, size_t* __idx = 0);
+
+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);
+
+int                stoi  (const wstring& __str, size_t* __idx = 0, int __base = 10);
+long               stol  (const wstring& __str, size_t* __idx = 0, int __base = 10);
+unsigned long      stoul (const wstring& __str, size_t* __idx = 0, int __base = 10);
+long long          stoll (const wstring& __str, size_t* __idx = 0, int __base = 10);
+unsigned long long stoull(const wstring& __str, size_t* __idx = 0, int __base = 10);
+
+float       stof (const wstring& __str, size_t* __idx = 0);
+double      stod (const wstring& __str, size_t* __idx = 0);
+long double stold(const wstring& __str, size_t* __idx = 0);
+
+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);
+
 template<class _CharT, class _Traits, class _Allocator>
     const typename basic_string<_CharT, _Traits, _Allocator>::size_type
                    basic_string<_CharT, _Traits, _Allocator>::npos;