Skip to content

Commit d558fc9

Browse files
authored
Merge 2019-11 LWG Motion 12
P1391R4 Range constructor for std::string_view
2 parents c1182ca + de25e23 commit d558fc9

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

source/strings.tex

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4020,6 +4020,8 @@
40204020
constexpr basic_string_view& operator=(const basic_string_view&) noexcept = default;
40214021
constexpr basic_string_view(const charT* str);
40224022
constexpr basic_string_view(const charT* str, size_type len);
4023+
template<class It, class End>
4024+
constexpr basic_string_view(It begin, End end);
40234025

40244026
// \ref{string.view.iterators}, iterator support
40254027
constexpr const_iterator begin() const noexcept;
@@ -4106,6 +4108,10 @@
41064108
const_pointer data_; // \expos
41074109
size_type size_; // \expos
41084110
};
4111+
4112+
// \ref{string.view.deduct}, deduction guide
4113+
template<class It, class End>
4114+
basic_string_view(It, End) -> basic_string_view<iter_value_t<It>>;
41094115
\end{codeblock}
41104116

41114117
\pnum
@@ -4174,6 +4180,36 @@
41744180
and initializing \tcode{size_} with \tcode{len}.
41754181
\end{itemdescr}
41764182

4183+
\indexlibraryctor{basic_string_view}%
4184+
\begin{itemdecl}
4185+
template<class It, class End>
4186+
constexpr basic_string_view(It begin, End end);
4187+
\end{itemdecl}
4188+
4189+
\begin{itemdescr}
4190+
\pnum
4191+
\constraints
4192+
\begin{itemize}
4193+
\item \tcode{It} satisfies \libconcept{contiguous_iterator}.
4194+
\item \tcode{End} satisfies \tcode{\libconcept{sized_sentinel_for}<It>}.
4195+
\item \tcode{is_same_v<iter_value_t<It>, charT>} is \tcode{true}.
4196+
\item \tcode{is_convertible_v<End, size_type>} is \tcode{false}.
4197+
\end{itemize}
4198+
4199+
\pnum
4200+
\expects
4201+
\begin{itemize}
4202+
\item \range{begin}{end} is a valid range.
4203+
\item \tcode{It} models \libconcept{contiguous_iterator}.
4204+
\item \tcode{End} models \tcode{\libconcept{sized_sentinel_for}<It>}.
4205+
\end{itemize}
4206+
4207+
\pnum
4208+
\effects
4209+
Initializes \tcode{data_} with \tcode{to_address(begin)} and
4210+
initializes \tcode{size_} with \tcode{end - begin}.
4211+
\end{itemdescr}
4212+
41774213
\rSec3[string.view.iterators]{Iterator support}
41784214

41794215
\indexlibrarymember{const_iterator}{basic_string_view}%
@@ -4836,6 +4872,22 @@
48364872
Otherwise, returns \tcode{npos}.
48374873
\end{itemdescr}
48384874

4875+
\rSec2[string.view.deduct]{Deduction guide}
4876+
4877+
\begin{itemdecl}
4878+
template<class It, class End>
4879+
basic_string_view(It, End) -> basic_string_view<iter_value_t<It>>;
4880+
\end{itemdecl}
4881+
4882+
\begin{itemdescr}
4883+
\pnum
4884+
\constraints
4885+
\begin{itemize}
4886+
\item \tcode{It} satisfies \libconcept{contiguous_iterator}.
4887+
\item \tcode{End} satisfies \tcode{\libconcept{sized_sentinel_for}<It>}.
4888+
\end{itemize}
4889+
\end{itemdescr}
4890+
48394891
\rSec2[string.view.comparison]{Non-member comparison functions}
48404892

48414893
\pnum

0 commit comments

Comments
 (0)