diff --git a/source/strings.tex b/source/strings.tex index a5c6c69171..1ca0f6d371 100644 --- a/source/strings.tex +++ b/source/strings.tex @@ -1046,6 +1046,10 @@ constexpr bool ends_with(basic_string_view x) const noexcept; constexpr bool ends_with(charT x) const noexcept; constexpr bool ends_with(const charT* x) const; + + constexpr bool contains(basic_string_view x) const noexcept; + constexpr bool contains(charT x) const noexcept; + constexpr bool contains(const charT* x) const; }; template x) const noexcept; +constexpr bool contains(charT x) const noexcept; +constexpr bool contains(const charT* x) const; +\end{itemdecl} + +\begin{itemdescr} +\pnum +\effects +Equivalent to: +\begin{codeblock} +return basic_string_view(data(), size()).contains(x); +\end{codeblock} +\end{itemdescr} + \rSec2[string.nonmembers]{Non-member functions} \indexlibraryglobal{basic_string} @@ -4117,6 +4139,10 @@ constexpr bool ends_with(charT x) const noexcept; constexpr bool ends_with(const charT* x) const; + constexpr bool contains(basic_string_view x) const noexcept; + constexpr bool contains(charT x) const noexcept; + constexpr bool contains(const charT* x) const; + // \ref{string.view.find}, searching constexpr size_type find(basic_string_view s, size_type pos = 0) const noexcept; constexpr size_type find(charT c, size_type pos = 0) const noexcept; @@ -4717,6 +4743,19 @@ Equivalent to: \tcode{return ends_with(basic_string_view(x));} \end{itemdescr} +\indexlibrarymember{contains}{basic_string_view}% +\begin{itemdecl} +constexpr bool contains(basic_string_view x) const noexcept; +constexpr bool contains(charT x) const noexcept; +constexpr bool contains(const charT* x) const; +\end{itemdecl} + +\begin{itemdescr} +\pnum +\effects +Equivalent to: \tcode{return find(x) != npos;} +\end{itemdescr} + \rSec3[string.view.find]{Searching} \pnum diff --git a/source/support.tex b/source/support.tex index 593b71d428..5fcba979c4 100644 --- a/source/support.tex +++ b/source/support.tex @@ -673,6 +673,7 @@ #define @\defnlibxname{cpp_lib_span}@ 202002L // also in \libheader{span} #define @\defnlibxname{cpp_lib_ssize}@ 201902L // also in \libheader{iterator} #define @\defnlibxname{cpp_lib_starts_ends_with}@ 201711L // also in \libheader{string}, \libheader{string_view} +#define @\defnlibxname{cpp_lib_string_contains}@ 202011L // also in \libheader{string}, \libheader{string_view} #define @\defnlibxname{cpp_lib_string_udls}@ 201304L // also in \libheader{string} #define @\defnlibxname{cpp_lib_string_view}@ 201803L // also in \libheader{string}, \libheader{string_view} #define @\defnlibxname{cpp_lib_syncbuf}@ 201803L // also in \libheader{syncstream}