Skip to content

Commit 0c84969

Browse files
committed
[buffer.synop], [buffer.seq.access] Add "noexcept"
[buffer.reqmts.mutablebuffersequence] Require buffer ops to be non-throwing Fixes NB GB-11 (PDTS)
1 parent c8c2afa commit 0c84969

File tree

1 file changed

+20
-18
lines changed

1 file changed

+20
-18
lines changed

src/buffers.tex

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@
4444

4545
// buffer sequence access:
4646

47-
const mutable_buffer* buffer_sequence_begin(const mutable_buffer& b);
48-
const const_buffer* buffer_sequence_begin(const const_buffer& b);
49-
const mutable_buffer* buffer_sequence_end(const mutable_buffer& b);
50-
const const_buffer* buffer_sequence_end(const const_buffer& b);
51-
template<class C> auto buffer_sequence_begin(C& c) -> decltype(c.begin());
52-
template<class C> auto buffer_sequence_begin(const C& c) -> decltype(c.begin());
53-
template<class C> auto buffer_sequence_end(C& c) -> decltype(c.end());
54-
template<class C> auto buffer_sequence_end(const C& c) -> decltype(c.end());
47+
const mutable_buffer* buffer_sequence_begin(const mutable_buffer& b) noexcept;
48+
const const_buffer* buffer_sequence_begin(const const_buffer& b) noexcept;
49+
const mutable_buffer* buffer_sequence_end(const mutable_buffer& b) noexcept;
50+
const const_buffer* buffer_sequence_end(const const_buffer& b) noexcept;
51+
template<class C> auto buffer_sequence_begin(C& c) noexcept -> decltype(c.begin());
52+
template<class C> auto buffer_sequence_begin(const C& c) noexcept -> decltype(c.begin());
53+
template<class C> auto buffer_sequence_end(C& c) noexcept -> decltype(c.end());
54+
template<class C> auto buffer_sequence_end(const C& c) noexcept -> decltype(c.end());
5555

5656
// buffer size:
5757

@@ -344,7 +344,8 @@
344344

345345
\tcode{net::buffer_sequence_begin(x)}\br
346346
\tcode{net::buffer_sequence_end(x)} &
347-
An iterator type meeting the requirements for bidirectional iterators (\CppXref{bidirectional.iterators}) whose value type is convertible to \tcode{mutable_buffer}. &
347+
An iterator type meeting the requirements for bidirectional iterators (\CppXref{bidirectional.iterators}) whose reference type is convertible to \tcode{mutable_buffer}. &
348+
For a dereferenceable iterator, no increment, decrement, or dereference operation, or conversion of the reference type to \tcode{mutable_buffer}, shall exit via an exception.
348349
\\ \rowsep
349350

350351
\tcode{X u(x);}
@@ -407,7 +408,8 @@
407408

408409
\tcode{net::buffer_sequence_begin(x)}\br
409410
\tcode{net::buffer_sequence_end(x)} &
410-
An iterator type meeting the requirements for bidirectional iterators (\CppXref{bidirectional.iterators}) whose value type is convertible to \tcode{const_buffer}. &
411+
An iterator type meeting the requirements for bidirectional iterators (\CppXref{bidirectional.iterators}) whose reference type is convertible to \tcode{const_buffer}. &
412+
For a dereferenceable iterator, no increment, decrement, or dereference operation, or conversion of the reference type to \tcode{const_buffer}, shall exit via an exception.
411413
\\ \rowsep
412414

413415
\tcode{X u(x);}
@@ -828,8 +830,8 @@
828830

829831
\indexlibrary{\idxcode{buffer_sequence_begin}}%
830832
\begin{itemdecl}
831-
const mutable_buffer* buffer_sequence_begin(const mutable_buffer& b);
832-
const const_buffer* buffer_sequence_begin(const const_buffer& b);
833+
const mutable_buffer* buffer_sequence_begin(const mutable_buffer& b) noexcept;
834+
const const_buffer* buffer_sequence_begin(const const_buffer& b) noexcept;
833835
\end{itemdecl}
834836

835837
\begin{itemdescr}
@@ -839,8 +841,8 @@
839841

840842
\indexlibrary{\idxcode{buffer_sequence_end}}%
841843
\begin{itemdecl}
842-
const mutable_buffer* buffer_sequence_end(const mutable_buffer& b);
843-
const const_buffer* buffer_sequence_end(const const_buffer& b);
844+
const mutable_buffer* buffer_sequence_end(const mutable_buffer& b) noexcept;
845+
const const_buffer* buffer_sequence_end(const const_buffer& b) noexcept;
844846
\end{itemdecl}
845847

846848
\begin{itemdescr}
@@ -850,8 +852,8 @@
850852

851853
\indexlibrary{\idxcode{buffer_sequence_begin}}%
852854
\begin{itemdecl}
853-
template<class C> auto buffer_sequence_begin(C& c) -> decltype(c.begin());
854-
template<class C> auto buffer_sequence_begin(const C& c) -> decltype(c.begin());
855+
template<class C> auto buffer_sequence_begin(C& c) noexcept -> decltype(c.begin());
856+
template<class C> auto buffer_sequence_begin(const C& c) noexcept -> decltype(c.begin());
855857
\end{itemdecl}
856858

857859
\begin{itemdescr}
@@ -861,8 +863,8 @@
861863

862864
\indexlibrary{\idxcode{buffer_sequence_end}}%
863865
\begin{itemdecl}
864-
template<class C> auto buffer_sequence_end(C& c) -> decltype(c.end());
865-
template<class C> auto buffer_sequence_end(const C& c) -> decltype(c.end());
866+
template<class C> auto buffer_sequence_end(C& c) noexcept -> decltype(c.end());
867+
template<class C> auto buffer_sequence_end(const C& c) noexcept -> decltype(c.end());
866868
\end{itemdecl}
867869

868870
\begin{itemdescr}

0 commit comments

Comments
 (0)