en	= `string`

en	Modifiable sequences of characters are represented using objects of type <<ref_string>>.

en	The interface and functionality of <<ref_string>> is the same as {std_string} except that:

en	<<ref_string>> is not a class template,

en	<<ref_string>> uses `char` as its character type,

en	redundant overloads for string operations have been replaced

en	with a <<ref_string_view>>-based interface,

en	access to characters in the range `[size(), capacity())` is permitted,

en	<<ref_storage_ptr>> is used instead of {req_Allocator}, and

en	small buffer optimisation is guaranteed, which avoids allocating memory for

en	small strings.

en	With augmented interface, operations requiring an input string are implemented as a single overload with a parameter of type <<ref_string_view>>, and can accept most string-like objects. Objects such as null terminated character pointers, `std::string`, <<ref_string>>, subranges of strings, and objects convertible to <<ref_string_view>> can all be passed to these functions.

en	More formally, `std::string` member function overloads that accept any of the following parameter combinations as an input string:

en	a `std::string` parameter, or

en	a `std::string` parameter and two `size_type` parameters that specify a

en	substring, or

en	a parameter of a type convertible to <<ref_string_view>>, or

en	a parameter of a type convertible to <<ref_string_view>> and two

en	`size_type` parameters that specify a substring, or

en	a `const_pointer` parameter, or

en	a parameter of type `const_pointer` and a `size_type` parameter that

en	specifies the length of the string

en	are replaced with an overload accepting a <<ref_string_view>> parameter.

en	This design removes several redundant overloads from the interface. For example, the 11 overloads of `std::string::insert` are reduced to just 3 in <<ref_string>>, while still providing identical functionality. In addition to these changes, overloads taking a `std::initializer_list<char>` parameter have been removed. Such overloads have little use, as they serve as little more than wrappers for arrays with an inefficient syntax:

en	With the removal of overloads that specify parameters for a substring, a member function `subview` that returns a <<ref_string_view>> is provided to facilitate cheap substring operations:

en	A <<ref_string>> may be constructed using the <<default_memory_resource,default memory resource>> without incurring any memory allocations. Alternatively, a <<ref_storage_ptr>> can be provided explicitly:

en	Formatted Output

en	When a <<ref_string>> is formatted to a {std_ostream}, the result is a valid JSON. That is, the result will be double quoted and the contents properly escaped per the JSON specification.

en	Accessing Storage Beyond `size()`

en	<<ref_string>> directly supports access to its storage in the range `[size(), capacity())`. This can be used for efficient assembly of a string from several parts. After the string is assembled, use the member function <<ref_string_grow>> to update the string's size and insert the null terminator. For example: