Standard library header <string> - cppreference.com

This header is part of the

strings

library.

Includes

<compare>

(C++20)

Three-way comparison operator

support

[edit]

<initializer_list>

(C++11)

std::initializer_list

class template

[edit]

Classes

char_traits

Class Template which describes properties of a character type
(class template)std::char_traits<char>(class template specialization)std::char_traits<wchar_t>(class template specialization)std::char_traits<char8_t>(C++20)(class template specialization)std::char_traits<char16_t>(C++11)(class template specialization)std::char_traits<char32_t>(C++11)(class template specialization)

basic_string

stores and manipulates sequences of characters
(class template)

[edit]

std::string

std::basic_string<char>(typedef)

std::u8string

(C++20)std::basic_string<char8_t>(typedef)

std::u16string

(C++11)std::basic_string<char16_t>(typedef)

std::u32string

(C++11)std::basic_string<char32_t>(typedef)

std::wstring

std::basic_string<wchar_t>(typedef)

std::pmr::basic_string

(C++17)(alias template)

std::pmr::string

(C++17)std::pmr::basic_string<char>(typedef)

std::pmr::u8string

(C++20)std::pmr::basic_string<char8_t>(typedef)

std::pmr::u16string

(C++17)std::pmr::basic_string<char16_t>(typedef)

std::pmr::u32string

(C++17)std::pmr::basic_string<char32_t>(typedef)

std::pmr::wstring

(C++17)std::pmr::basic_string<wchar_t>(typedef)

std::hash<std::basic_string>

(C++11)

hash support for strings
(class template specialization)Functions

operator+

concatenates two strings, a string and a char, or a string and

string_view

(function template)

[edit]

operator==operator!=operator<operator>operator<=operator>=operator<=>

(removed in C++20)(removed in C++20)(removed in C++20)(removed in C++20)(removed in C++20)(C++20)

lexicographically compares two strings
(function template)

[edit]

std::swap(std::basic_string)

specializes the

std::swap

algorithm
(function template)

[edit]

erase(std::basic_string)erase_if(std::basic_string)

(C++20)

erases all elements satisfying specific criteria
(function template)

[edit]

Input/output

operator<<operator>>

performs stream input and output on strings
(function template)

[edit]

getline

read data from an I/O stream into a string
(function template)

[edit]

Numeric conversions

stoistolstoll

(C++11)(C++11)(C++11)

converts a string to a signed integer
(function)

[edit]

stoulstoull

(C++11)(C++11)

converts a string to an unsigned integer
(function)

[edit]

stofstodstold

(C++11)(C++11)(C++11)

converts a string to a floating point value
(function)

[edit]

to_string

(C++11)

converts an integral or floating-point value to string
(function)

[edit]

to_wstring

(C++11)

converts an integral or floating-point value to wstring
(function)

[edit]

Range access

begincbegin

(C++11)(C++14)

returns an iterator to the beginning of a container or array
(function template)

[edit]

endcend

(C++11)(C++14)

returns an iterator to the end of a container or array
(function template)

[edit]

rbegincrbegin

(C++14)

returns a reverse iterator to the beginning of a container or array
(function template)

[edit]

rendcrend

(C++14)

returns a reverse end iterator for a container or array
(function template)

[edit]

sizessize

(C++17)(C++20)

returns the size of a container or array
(function template)

[edit]

empty

(C++17)

checks whether the container is empty
(function template)

[edit]

data

(C++17)

obtains the pointer to the underlying array
(function template)

[edit]

Literals Defined in inline namespace std::literals::string_literals

operator""s

(C++14)

converts a character array literal to basic_string
(function)

[edit]

Synopsis

#include<compare>#include<initializer_list>namespacestd{// character traitstemplate<classCharT>structchar_traits;// freestandingtemplate<>structchar_traits<char>;// freestandingtemplate<>structchar_traits<char8_t>;// freestandingtemplate<>structchar_traits<char16_t>;// freestandingtemplate<>structchar_traits<char32_t>;// freestandingtemplate<>structchar_traits<wchar_t>;// freestanding// basic_stringtemplate<classCharT,classTraits=char_traits<CharT>,classAllocator=allocator<CharT>>classbasic_string;template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(constbasic_string<CharT,Traits,Allocator>&lhs,constbasic_string<CharT,Traits,Allocator>&rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(basic_string<CharT,Traits,Allocator>&&lhs,constbasic_string<CharT,Traits,Allocator>&rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(constbasic_string<CharT,Traits,Allocator>&lhs,basic_string<CharT,Traits,Allocator>&&rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(basic_string<CharT,Traits,Allocator>&&lhs,basic_string<CharT,Traits,Allocator>&&rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(constCharT*lhs,constbasic_string<CharT,Traits,Allocator>&rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(constCharT*lhs,basic_string<CharT,Traits,Allocator>&&rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(CharTlhs,constbasic_string<CharT,Traits,Allocator>&rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(CharTlhs,basic_string<CharT,Traits,Allocator>&&rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(constbasic_string<CharT,Traits,Allocator>&lhs,constCharT*rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(basic_string<CharT,Traits,Allocator>&&lhs,constCharT*rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(constbasic_string<CharT,Traits,Allocator>&lhs,CharTrhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(basic_string<CharT,Traits,Allocator>&&lhs,CharTrhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(constbasic_string<CharT,Traits,Allocator>&lhs,type_identity_t<basic_string_view<CharT,Traits>>rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(basic_string<CharT,Traits,Allocator>&&lhs,type_identity_t<basic_string_view<CharT,Traits>>rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(type_identity_t<basic_string_view<CharT,Traits>>lhs,constbasic_string<CharT,Traits,Allocator>&rhs);template<classCharT,classTraits,classAllocator>constexprbasic_string<CharT,Traits,Allocator>operator+(type_identity_t<basic_string_view<CharT,Traits>>lhs,basic_string<CharT,Traits,Allocator>&&rhs);template<classCharT,classTraits,classAllocator>constexprbooloperator==(constbasic_string<CharT,Traits,Allocator>&lhs,constbasic_string<CharT,Traits,Allocator>&rhs)noexcept;template<classCharT,classTraits,classAllocator>constexprbooloperator==(constbasic_string<CharT,Traits,Allocator>&lhs,constCharT*rhs);template<classCharT,classTraits,classAllocator>constexpr/* see description */operator<=>(constbasic_string<CharT,Traits,Allocator>&lhs,constbasic_string<CharT,Traits,Allocator>&rhs)noexcept;template<classCharT,classTraits,classAllocator>constexpr/* see description */operator<=>(constbasic_string<CharT,Traits,Allocator>&lhs,constCharT*rhs);// swaptemplate<classCharT,classTraits,classAllocator>constexprvoidswap(basic_string<CharT,Traits,Allocator>&lhs,basic_string<CharT,Traits,Allocator>&rhs)noexcept(noexcept(lhs.swap(rhs)));// inserters and extractorstemplate<classCharT,classTraits,classAllocator>basic_istream<CharT,Traits>&operator>>(basic_istream<CharT,Traits>&is,basic_string<CharT,Traits,Allocator>&str);template<classCharT,classTraits,classAllocator>basic_ostream<CharT,Traits>&operator<<(basic_ostream<CharT,Traits>&os,constbasic_string<CharT,Traits,Allocator>&str);template<classCharT,classTraits,classAllocator>basic_istream<CharT,Traits>&getline(basic_istream<CharT,Traits>&is,basic_string<CharT,Traits,Allocator>&str,CharTdelim);template<classCharT,classTraits,classAllocator>basic_istream<CharT,Traits>&getline(basic_istream<CharT,Traits>&&is,basic_string<CharT,Traits,Allocator>&str,CharTdelim);template<classCharT,classTraits,classAllocator>basic_istream<CharT,Traits>&getline(basic_istream<CharT,Traits>&is,basic_string<CharT,Traits,Allocator>&str);template<classCharT,classTraits,classAllocator>basic_istream<CharT,Traits>&getline(basic_istream<CharT,Traits>&&is,basic_string<CharT,Traits,Allocator>&str);// erasuretemplate<classCharT,classTraits,classAllocator,classU=CharT>constexprtypenamebasic_string<CharT,Traits,Allocator>::size_typeerase(basic_string<CharT,Traits,Allocator>&c,constU&value);template<classCharT,classTraits,classAllocator,classPredicate>constexprtypenamebasic_string<CharT,Traits,Allocator>::size_typeerase_if(basic_string<CharT,Traits,Allocator>&c,Predicatepred);// basic_string typedef-namesusingstring=basic_string<char>;usingu8string=basic_string<char8_t>;usingu16string=basic_string<char16_t>;usingu32string=basic_string<char32_t>;usingwstring=basic_string<wchar_t>;// numeric conversionsintstoi(conststring&str,size_t*idx=nullptr,intbase=10);longstol(conststring&str,size_t*idx=nullptr,intbase=10);unsignedlongstoul(conststring&str,size_t*idx=nullptr,intbase=10);longlongstoll(conststring&str,size_t*idx=nullptr,intbase=10);unsignedlonglongstoull(conststring&str,size_t*idx=nullptr,intbase=10);floatstof(conststring&str,size_t*idx=nullptr);doublestod(conststring&str,size_t*idx=nullptr);longdoublestold(conststring&str,size_t*idx=nullptr);constexprstringto_string(intval);constexprstringto_string(unsignedval);constexprstringto_string(longval);constexprstringto_string(unsignedlongval);constexprstringto_string(longlongval);constexprstringto_string(unsignedlonglongval);stringto_string(floatval);stringto_string(doubleval);stringto_string(longdoubleval);intstoi(constwstring&str,size_t*idx=nullptr,intbase=10);longstol(constwstring&str,size_t*idx=nullptr,intbase=10);unsignedlongstoul(constwstring&str,size_t*idx=nullptr,intbase=10);longlongstoll(constwstring&str,size_t*idx=nullptr,intbase=10);unsignedlonglongstoull(constwstring&str,size_t*idx=nullptr,intbase=10);floatstof(constwstring&str,size_t*idx=nullptr);doublestod(constwstring&str,size_t*idx=nullptr);longdoublestold(constwstring&str,size_t*idx=nullptr);constexprwstringto_wstring(intval);constexprwstringto_wstring(unsignedval);constexprwstringto_wstring(longval);constexprwstringto_wstring(unsignedlongval);constexprwstringto_wstring(longlongval);constexprwstringto_wstring(unsignedlonglongval);wstringto_wstring(floatval);wstringto_wstring(doubleval);wstringto_wstring(longdoubleval);namespacepmr{template<classCharT,classTraits=char_traits<CharT>>usingbasic_string=std::basic_string<CharT,Traits,polymorphic_allocator<CharT>>;usingstring=basic_string<char>;usingu8string=basic_string<char8_t>;usingu16string=basic_string<char16_t>;usingu32string=basic_string<char32_t>;usingwstring=basic_string<wchar_t>;}// hash supporttemplate<classT>structhash;template<classA>structhash<basic_string<char,char_traits<char>,A>>;template<classA>structhash<basic_string<char8_t,char_traits<char8_t>,A>>;template<classA>structhash<basic_string<char16_t,char_traits<char16_t>,A>>;template<classA>structhash<basic_string<char32_t,char_traits<char32_t>,A>>;template<classA>structhash<basic_string<wchar_t,char_traits<wchar_t>,A>>;inlinenamespaceliterals{inlinenamespacestring_literals{// suffix for basic_string literalsconstexprstringoperator""s(constchar*str,size_tlen);constexpru8stringoperator""s(constchar8_t*str,size_tlen);constexpru16stringoperator""s(constchar16_t*str,size_tlen);constexpru32stringoperator""s(constchar32_t*str,size_tlen);constexprwstringoperator""s(constwchar_t*str,size_tlen);}}}Class template

std::char_traits

namespacestd{template<>structchar_traits<char>{usingchar_type=char;usingint_type=int;usingoff_type=streamoff;usingpos_type=streampos;usingstate_type=mbstate_t;usingcomparison_category=strong_ordering;staticconstexprvoidassign(char_type&c1,constchar_type&c2)noexcept;staticconstexprbooleq(char_typec1,char_typec2)noexcept;staticconstexprboollt(char_typec1,char_typec2)noexcept;staticconstexprintcompare(constchar_type*s1,constchar_type*s2,size_tn);staticconstexprsize_tlength(constchar_type*s);staticconstexprconstchar_type*find(constchar_type*s,size_tn,constchar_type&a);staticconstexprchar_type*move(char_type*s1,constchar_type*s2,size_tn);staticconstexprchar_type*copy(char_type*s1,constchar_type*s2,size_tn);staticconstexprchar_type*assign(char_type*s,size_tn,char_typea);staticconstexprint_typenot_eof(int_typec)noexcept;staticconstexprchar_typeto_char_type(int_typec)noexcept;staticconstexprint_typeto_int_type(char_typec)noexcept;staticconstexprbooleq_int_type(int_typec1,int_typec2)noexcept;staticconstexprint_typeeof()noexcept;};template<>structchar_traits<char8_t>{usingchar_type=char8_t;usingint_type=unsignedint;usingoff_type=streamoff;usingpos_type=u8streampos;usingstate_type=mbstate_t;usingcomparison_category=strong_ordering;staticconstexprvoidassign(char_type&c1,constchar_type&c2)noexcept;staticconstexprbooleq(char_typec1,char_typec2)noexcept;staticconstexprboollt(char_typec1,char_typec2)noexcept;staticconstexprintcompare(constchar_type*s1,constchar_type*s2,size_tn);staticconstexprsize_tlength(constchar_type*s);staticconstexprconstchar_type*find(constchar_type*s,size_tn,constchar_type&a);staticconstexprchar_type*move(char_type*s1,constchar_type*s2,size_tn);staticconstexprchar_type*copy(char_type*s1,constchar_type*s2,size_tn);staticconstexprchar_type*assign(char_type*s,size_tn,char_typea);staticconstexprint_typenot_eof(int_typec)noexcept;staticconstexprchar_typeto_char_type(int_typec)noexcept;staticconstexprint_typeto_int_type(char_typec)noexcept;staticconstexprbooleq_int_type(int_typec1,int_typec2)noexcept;staticconstexprint_typeeof()noexcept;};template<>structchar_traits<char16_t>{usingchar_type=char16_t;usingint_type=uint_least16_t;usingoff_type=streamoff;usingpos_type=u16streampos;usingstate_type=mbstate_t;usingcomparison_category=strong_ordering;staticconstexprvoidassign(char_type&c1,constchar_type&c2)noexcept;staticconstexprbooleq(char_typec1,char_typec2)noexcept;staticconstexprboollt(char_typec1,char_typec2)noexcept;staticconstexprintcompare(constchar_type*s1,constchar_type*s2,size_tn);staticconstexprsize_tlength(constchar_type*s);staticconstexprconstchar_type*find(constchar_type*s,size_tn,constchar_type&a);staticconstexprchar_type*move(char_type*s1,constchar_type*s2,size_tn);staticconstexprchar_type*copy(char_type*s1,constchar_type*s2,size_tn);staticconstexprchar_type*assign(char_type*s,size_tn,char_typea);staticconstexprint_typenot_eof(int_typec)noexcept;staticconstexprchar_typeto_char_type(int_typec)noexcept;staticconstexprint_typeto_int_type(char_typec)noexcept;staticconstexprbooleq_int_type(int_typec1,int_typec2)noexcept;staticconstexprint_typeeof()noexcept;};template<>structchar_traits<char32_t>{usingchar_type=char32_t;usingint_type=uint_least32_t;usingoff_type=streamoff;usingpos_type=u32streampos;usingstate_type=mbstate_t;usingcomparison_category=strong_ordering;staticconstexprvoidassign(char_type&c1,constchar_type&c2)noexcept;staticconstexprbooleq(char_typec1,char_typec2)noexcept;staticconstexprboollt(char_typec1,char_typec2)noexcept;staticconstexprintcompare(constchar_type*s1,constchar_type*s2,size_tn);staticconstexprsize_tlength(constchar_type*s);staticconstexprconstchar_type*find(constchar_type*s,size_tn,constchar_type&a);staticconstexprchar_type*move(char_type*s1,constchar_type*s2,size_tn);staticconstexprchar_type*copy(char_type*s1,constchar_type*s2,size_tn);staticconstexprchar_type*assign(char_type*s,size_tn,char_typea);staticconstexprint_typenot_eof(int_typec)noexcept;staticconstexprchar_typeto_char_type(int_typec)noexcept;staticconstexprint_typeto_int_type(char_typec)noexcept;staticconstexprbooleq_int_type(int_typec1,int_typec2)noexcept;staticconstexprint_typeeof()noexcept;};template<>structchar_traits<wchar_t>{usingchar_type=wchar_t;usingint_type=wint_t;usingoff_type=streamoff;usingpos_type=wstreampos;usingstate_type=mbstate_t;usingcomparison_category=strong_ordering;staticconstexprvoidassign(char_type&c1,constchar_type&c2)noexcept;staticconstexprbooleq(char_typec1,char_typec2)noexcept;staticconstexprboollt(char_typec1,char_typec2)noexcept;staticconstexprintcompare(constchar_type*s1,constchar_type*s2,size_tn);staticconstexprsize_tlength(constchar_type*s);staticconstexprconstchar_type*find(constchar_type*s,size_tn,constchar_type&a);staticconstexprchar_type*move(char_type*s1,constchar_type*s2,size_tn);staticconstexprchar_type*copy(char_type*s1,constchar_type*s2,size_tn);staticconstexprchar_type*assign(char_type*s,size_tn,char_typea);staticconstexprint_typenot_eof(int_typec)noexcept;staticconstexprchar_typeto_char_type(int_typec)noexcept;staticconstexprint_typeto_int_type(char_typec)noexcept;staticconstexprbooleq_int_type(int_typec1,int_typec2)noexcept;staticconstexprint_typeeof()noexcept;};}Class template

std::basic_string

namespacestd{template<classCharT,classTraits=char_traits<CharT>,classAllocator=allocator<CharT>>classbasic_string{public:// typesusingtraits_type=Traits;usingvalue_type=CharT;usingallocator_type=Allocator;usingsize_type=allocator_traits<Allocator>::size_type;usingdifference_type=allocator_traits<Allocator>::difference_type;usingpointer=allocator_traits<Allocator>::pointer;usingconst_pointer=allocator_traits<Allocator>::const_pointer;usingreference=value_type&;usingconst_reference=constvalue_type&;usingiterator=/* implementation-defined */;usingconst_iterator=/* implementation-defined */;usingreverse_iterator=std::reverse_iterator<iterator>;usingconst_reverse_iterator=std::reverse_iterator<const_iterator>;staticconstexprsize_typenpos=size_type(-1);// construct/copy/destroyconstexprbasic_string()noexcept(noexcept(Allocator())):basic_string(Allocator()){}constexprexplicitbasic_string(constAllocator&a)noexcept;constexprbasic_string(constbasic_string&str);constexprbasic_string(basic_string&&str)noexcept;constexprbasic_string(constbasic_string&str,size_typepos,constAllocator&a=Allocator());constexprbasic_string(constbasic_string&str,size_typepos,size_typen,constAllocator&a=Allocator());constexprbasic_string(basic_string&&str,size_typepos,constAllocator&a=Allocator());constexprbasic_string(basic_string&&str,size_typepos,size_typen,constAllocator&a=Allocator());template<classT>constexprbasic_string(constT&t,size_typepos,size_typen,constAllocator&a=Allocator());template<classT>constexprexplicitbasic_string(constT&t,constAllocator&a=Allocator());constexprbasic_string(constCharT*s,size_typen,constAllocator&a=Allocator());constexprbasic_string(constCharT*s,constAllocator&a=Allocator());basic_string(nullptr_t)=delete;constexprbasic_string(size_typen,CharTc,constAllocator&a=Allocator());template<classInputIter>constexprbasic_string(InputIterbegin,InputIterend,constAllocator&a=Allocator());template<container-compatible-range<CharT>R>constexprbasic_string(from_range_t,R&&rg,constAllocator&a=Allocator());constexprbasic_string(initializer_list<CharT>,constAllocator&=Allocator());constexprbasic_string(constbasic_string&,constAllocator&);constexprbasic_string(basic_string&&,constAllocator&);constexpr~basic_string();constexprbasic_string&operator=(constbasic_string&str);constexprbasic_string&operator=(basic_string&&str)noexcept(allocator_traits<Allocator>::propagate_on_container_move_assignment::value||allocator_traits<Allocator>::is_always_equal::value);template<classT>constexprbasic_string&operator=(constT&t);constexprbasic_string&operator=(constCharT*s);basic_string&operator=(nullptr_t)=delete;constexprbasic_string&operator=(CharTc);constexprbasic_string&operator=(initializer_list<CharT>);// iteratorsconstexpriteratorbegin()noexcept;constexprconst_iteratorbegin()constnoexcept;constexpriteratorend()noexcept;constexprconst_iteratorend()constnoexcept;constexprreverse_iteratorrbegin()noexcept;constexprconst_reverse_iteratorrbegin()constnoexcept;constexprreverse_iteratorrend()noexcept;constexprconst_reverse_iteratorrend()constnoexcept;constexprconst_iteratorcbegin()constnoexcept;constexprconst_iteratorcend()constnoexcept;constexprconst_reverse_iteratorcrbegin()constnoexcept;constexprconst_reverse_iteratorcrend()constnoexcept;// capacityconstexprsize_typesize()constnoexcept;constexprsize_typelength()constnoexcept;constexprsize_typemax_size()constnoexcept;constexprvoidresize(size_typen,CharTc);constexprvoidresize(size_typen);template<classOperation>constexprvoidresize_and_overwrite(size_typen,Operationop);constexprsize_typecapacity()constnoexcept;constexprvoidreserve(size_typeres_arg);constexprvoidshrink_to_fit();constexprvoidclear()noexcept;constexprboolempty()constnoexcept;// element accessconstexprconst_referenceoperator[](size_typepos)const;constexprreferenceoperator[](size_typepos);constexprconst_referenceat(size_typen)const;constexprreferenceat(size_typen);constexprconst_referencefront()const;constexprreferencefront();constexprconst_referenceback()const;constexprreferenceback();// modifiersconstexprbasic_string&operator+=(constbasic_string&str);template<classT>constexprbasic_string&operator+=(constT&t);constexprbasic_string&operator+=(constCharT*s);constexprbasic_string&operator+=(CharTc);constexprbasic_string&operator+=(initializer_list<CharT>);constexprbasic_string&append(constbasic_string&str);constexprbasic_string&append(constbasic_string&str,size_typepos,size_typen=npos);template<classT>constexprbasic_string&append(constT&t);template<classT>constexprbasic_string&append(constT&t,size_typepos,size_typen=npos);constexprbasic_string&append(constCharT*s,size_typen);constexprbasic_string&append(constCharT*s);constexprbasic_string&append(constCharT*s,size_typepos,size_typen);constexprbasic_string&append(size_typen,CharTc);template<classInputIter>constexprbasic_string&append(InputIterfirst,InputIterlast);template<container-compatible-range<CharT>R>constexprbasic_string&append_range(R&&rg);constexprbasic_string&append(initializer_list<CharT>);constexprvoidpush_back(CharTc);constexprbasic_string&assign(constbasic_string&str);constexprbasic_string&assign(basic_string&&str)noexcept(allocator_traits<Allocator>::propagate_on_container_move_assignment::value||allocator_traits<Allocator>::is_always_equal::value);constexprbasic_string&assign(constbasic_string&str,size_typepos,size_typen=npos);template<classT>constexprbasic_string&assign(constT&t);template<classT>constexprbasic_string&assign(constT&t,size_typepos,size_typen=npos);constexprbasic_string&assign(constCharT*s,size_typen);constexprbasic_string&assign(constCharT*s);constexprbasic_string&assign(constCharT*s,size_typepos,size_typen);constexprbasic_string&assign(size_typen,CharTc);template<classInputIter>constexprbasic_string&assign(InputIterfirst,InputIterlast);template<container-compatible-range<CharT>R>constexprbasic_string&assign_range(R&&rg);constexprbasic_string&assign(initializer_list<CharT>);constexprbasic_string&insert(size_typepos,constbasic_string&str);constexprbasic_string&insert(size_typepos1,constbasic_string&str,size_typepos2,size_typen=npos);template<classT>constexprbasic_string&insert(size_typepos,constT&t);template<classT>constexprbasic_string&insert(size_typepos1,constT&t,size_typepos2,size_typen=npos);constexprbasic_string&insert(size_typepos,constCharT*s,size_typen);constexprbasic_string&insert(size_typepos,constCharT*s);constexprbasic_string&insert(size_typepos,size_typen,CharTc);constexpriteratorinsert(const_iteratorp,CharTc);constexpriteratorinsert(const_iteratorp,size_typen,CharTc);template<classInputIter>constexpriteratorinsert(const_iteratorp,InputIterfirst,InputIterlast);template<container-compatible-range<CharT>R>constexpriteratorinsert_range(const_iteratorp,R&&rg);constexpriteratorinsert(const_iteratorp,initializer_list<CharT>);constexprbasic_string&erase(size_typepos=0,size_typen=npos);constexpriteratorerase(const_iteratorp);constexpriteratorerase(const_iteratorfirst,const_iteratorlast);constexprvoidpop_back();constexprbasic_string&replace(size_typepos1,size_typen1,constbasic_string&str);constexprbasic_string&replace(size_typepos1,size_typen1,constbasic_string&str,size_typepos2,size_typen2=npos);template<classT>constexprbasic_string&replace(size_typepos1,size_typen1,constT&t);template<classT>constexprbasic_string&replace(size_typepos1,size_typen1,constT&t,size_typepos2,size_typen2=npos);constexprbasic_string&replace(size_typepos,size_typen1,constCharT*s,size_typen2);constexprbasic_string&replace(size_typepos,size_typen1,constCharT*s);constexprbasic_string&replace(size_typepos,size_typen1,size_typen2,CharTc);constexprbasic_string&replace(const_iteratori1,const_iteratori2,constbasic_string&str);template<classT>constexprbasic_string&replace(const_iteratori1,const_iteratori2,constT&t);constexprbasic_string&replace(const_iteratori1,const_iteratori2,constCharT*s,size_typen);constexprbasic_string&replace(const_iteratori1,const_iteratori2,constCharT*s);constexprbasic_string&replace(const_iteratori1,const_iteratori2,size_typen,CharTc);template<classInputIter>constexprbasic_string&replace(const_iteratori1,const_iteratori2,InputIterj1,InputIterj2);template<container-compatible-range<CharT>R>constexprbasic_string&replace_with_range(const_iteratori1,const_iteratori2,R&&rg);constexprbasic_string&replace(const_iterator,const_iterator,initializer_list<CharT>);constexprsize_typecopy(CharT*s,size_typen,size_typepos=0)const;constexprvoidswap(basic_string&str)noexcept(allocator_traits<Allocator>::propagate_on_container_swap::value||allocator_traits<Allocator>::is_always_equal::value);// string operationsconstexprconstCharT*c_str()constnoexcept;constexprconstCharT*data()constnoexcept;constexprCharT*data()noexcept;constexproperatorbasic_string_view<CharT,Traits>()constnoexcept;constexprallocator_typeget_allocator()constnoexcept;template<classT>constexprsize_typefind(constT&t,size_typepos=0)constnoexcept(/* see description */);constexprsize_typefind(constbasic_string&str,size_typepos=0)constnoexcept;constexprsize_typefind(constCharT*s,size_typepos,size_typen)const;constexprsize_typefind(constCharT*s,size_typepos=0)const;constexprsize_typefind(CharTc,size_typepos=0)constnoexcept;template<classT>constexprsize_typerfind(constT&t,size_typepos=npos)constnoexcept(/* see description */);constexprsize_typerfind(constbasic_string&str,size_typepos=npos)constnoexcept;constexprsize_typerfind(constCharT*s,size_typepos,size_typen)const;constexprsize_typerfind(constCharT*s,size_typepos=npos)const;constexprsize_typerfind(CharTc,size_typepos=npos)constnoexcept;template<classT>constexprsize_typefind_first_of(constT&t,size_typepos=0)constnoexcept(/* see description */);constexprsize_typefind_first_of(constbasic_string&str,size_typepos=0)constnoexcept;constexprsize_typefind_first_of(constCharT*s,size_typepos,size_typen)const;constexprsize_typefind_first_of(constCharT*s,size_typepos=0)const;constexprsize_typefind_first_of(CharTc,size_typepos=0)constnoexcept;template<classT>constexprsize_typefind_last_of(constT&t,size_typepos=npos)constnoexcept(/* see description */);constexprsize_typefind_last_of(constbasic_string&str,size_typepos=npos)constnoexcept;constexprsize_typefind_last_of(constCharT*s,size_typepos,size_typen)const;constexprsize_typefind_last_of(constCharT*s,size_typepos=npos)const;constexprsize_typefind_last_of(CharTc,size_typepos=npos)constnoexcept;template<classT>constexprsize_typefind_first_not_of(constT&t,size_typepos=0)constnoexcept(/* see description */);constexprsize_typefind_first_not_of(constbasic_string&str,size_typepos=0)constnoexcept;constexprsize_typefind_first_not_of(constCharT*s,size_typepos,size_typen)const;constexprsize_typefind_first_not_of(constCharT*s,size_typepos=0)const;constexprsize_typefind_first_not_of(CharTc,size_typepos=0)constnoexcept;template<classT>constexprsize_typefind_last_not_of(constT&t,size_typepos=npos)constnoexcept(/* see description */);constexprsize_typefind_last_not_of(constbasic_string&str,size_typepos=npos)constnoexcept;constexprsize_typefind_last_not_of(constCharT*s,size_typepos,size_typen)const;constexprsize_typefind_last_not_of(constCharT*s,size_typepos=npos)const;constexprsize_typefind_last_not_of(CharTc,size_typepos=npos)constnoexcept;constexprbasic_stringsubstr(size_typepos=0,size_typen=npos)const&;constexprbasic_stringsubstr(size_typepos=0,size_typen=npos)&&;constexprbasic_string_view<CharT,Traits>subview(size_typepos=0,size_typen=npos)const;template<classT>constexprintcompare(constT&t)constnoexcept(/* see description */);template<classT>constexprintcompare(size_typepos1,size_typen1,constT&t)const;template<classT>constexprintcompare(size_typepos1,size_typen1,constT&t,size_typepos2,size_typen2=npos)const;constexprintcompare(constbasic_string&str)constnoexcept;constexprintcompare(size_typepos1,size_typen1,constbasic_string&str)const;constexprintcompare(size_typepos1,size_typen1,constbasic_string&str,size_typepos2,size_typen2=npos)const;constexprintcompare(constCharT*s)const;constexprintcompare(size_typepos1,size_typen1,constCharT*s)const;constexprintcompare(size_typepos1,size_typen1,constCharT*s,size_typen2)const;constexprboolstarts_with(basic_string_view<CharT,Traits>x)constnoexcept;constexprboolstarts_with(CharTx)constnoexcept;constexprboolstarts_with(constCharT*x)const;constexprboolends_with(basic_string_view<CharT,Traits>x)constnoexcept;constexprboolends_with(CharTx)constnoexcept;constexprboolends_with(constCharT*x)const;constexprboolcontains(basic_string_view<CharT,Traits>x)constnoexcept;constexprboolcontains(CharTx)constnoexcept;constexprboolcontains(constCharT*x)const;};template<classInputIter,classAllocator=allocator<typenameiterator_traits<InputIter>::value_type>>basic_string(InputIter,InputIter,Allocator=Allocator())->basic_string<typenameiterator_traits<InputIter>::value_type,char_traits<typenameiterator_traits<InputIter>::value_type>,Allocator>;template<ranges::input_rangeR,classAllocator=allocator<ranges::range_value_t<R>>>basic_string(from_range_t,R&&,Allocator=Allocator())->basic_string<ranges::range_value_t<R>,char_traits<ranges::range_value_t<R>>,Allocator>;template<classCharT,classTraits,classAllocator=allocator<CharT>>explicitbasic_string(basic_string_view<CharT,Traits>,constAllocator&=Allocator())->basic_string<CharT,Traits,Allocator>;template<classCharT,classTraits,classAllocator=allocator<CharT>>basic_string(basic_string_view<CharT,Traits>,typename/* see description */::size_type,typename/* see description */::size_type,constAllocator&=Allocator())->basic_string<CharT,Traits,Allocator>;}Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior

LWG 209

C++98 the declarations of the following

std::basic_string

members used inconsistent styles in the synopsis: void push_back(CharT c);

basic_string& assign(const basic_string& str);

void swap(basic_string& str);

uniformed the styles