@@ -190,6 +190,11 @@ void swap(basic_spanbuf<_Elem, _Traits>& _Left, basic_spanbuf<_Elem, _Traits>& _
190
190
_Left.swap(_Right);
191
191
}
192
192
193
+ template <class _Elem, size_t _Extent>
194
+ span<_Elem, _Extent> _As_nonconst_span(const span<const _Elem, _Extent> _Span) noexcept {
195
+ return span<_Elem, _Extent>{const_cast<_Elem*>(_Span.data()), _Span.size()};
196
+ }
197
+
193
198
_EXPORT_STD template <class _Elem, class _Traits>
194
199
class basic_ispanstream : public basic_istream<_Elem, _Traits> {
195
200
private:
@@ -207,9 +212,6 @@ public:
207
212
explicit basic_ispanstream(_STD span<_Elem> _Span, ios_base::openmode _Which = ios_base::in)
208
213
: _Mybase(_STD addressof(_Buf)), _Buf(_Span, _Which | ios_base::in) {}
209
214
210
- explicit basic_ispanstream(_STD span<const _Elem> _Span)
211
- : basic_ispanstream(_STD span<_Elem>{const_cast<_Elem*>(_Span.data()), _Span.size()}) {}
212
-
213
215
basic_ispanstream(const basic_ispanstream&) = delete;
214
216
215
217
basic_ispanstream(basic_ispanstream&& _Right) : _Mybase(_STD move(_Right)), _Buf(_STD move(_Right._Buf)) {
@@ -220,7 +222,8 @@ public:
220
222
requires (
221
223
!convertible_to<_ReadOnlyRange, _STD span<_Elem>> && convertible_to<_ReadOnlyRange, _STD span<const _Elem>>)
222
224
explicit basic_ispanstream(_ReadOnlyRange&& _Range)
223
- : basic_ispanstream(static_cast<_STD span<const _Elem>>(_STD forward<_ReadOnlyRange>(_Range))) {}
225
+ : basic_ispanstream(
226
+ _STD _As_nonconst_span(static_cast<_STD span<const _Elem>>(_STD forward<_ReadOnlyRange>(_Range)))) {}
224
227
225
228
basic_ispanstream& operator=(const basic_ispanstream&) = delete;
226
229
@@ -254,7 +257,7 @@ public:
254
257
!convertible_to<_ReadOnlyRange, _STD span<_Elem>> && convertible_to<_ReadOnlyRange, _STD span<const _Elem>>)
255
258
void span(_ReadOnlyRange&& _Range) noexcept {
256
259
const auto _Sp = static_cast<_STD span<const _Elem>>(_STD forward<_ReadOnlyRange>(_Range));
257
- this ->span(_STD span<_Elem>{const_cast<_Elem*> (_Sp.data()), _Sp.size()} );
260
+ rdbuf() ->span(_STD _As_nonconst_span (_Sp) );
258
261
}
259
262
260
263
private:
0 commit comments