117 static_assert(
sizeof(
DerivedT) >= 0,
"incomplete derived type");
118 static_assert(std::is_base_of_v<OStreamBase<DerivedT>,
DerivedT>);
119 return static_cast<DerivedT&
>(*this);
122template <
class DerivedT>
125 return get_derived().do_prepare_space(
num_bytes);
128template <
class DerivedT>
134template <
class DerivedT>
135void OStreamBase<DerivedT>::set_badbit()
137 get_derived().do_set_badbit();
140template <
class DerivedT>
150 return get_derived();
153template <
class DerivedT>
157 char*
buf = prepare_space(1);
164 return get_derived();
167template <
class DerivedT>
171 return get_derived();
174template <
class DerivedT>
180 + std::is_signed_v<T>;
190 if constexpr (std::is_signed_v<T>) {
201 relinquish_space(end -
buf);
206 return get_derived();
209template <
class DerivedT>
210template <
class T>
requires std::floating_point<T>
217 relinquish_space(end -
buf);
228 buf = prepare_space(consumed);
232 relinquish_space(consumed);
238 return get_derived();
241template <
class DerivedT>
247template <
class DerivedT>
253template <
class StreamT>
261template <
class StreamT>
262 requires detail::InheritsBasicOStream<StreamT>
269template <
class StreamT>
270 requires detail::InheritsBasicOStream<StreamT>
277template <
class StreamT>
278 requires detail::InheritsBasicOStream<StreamT>
285template <
class StreamT>
286 requires detail::InheritsBasicOStream<StreamT>
293template <
class StreamT>
294 requires detail::InheritsBasicOStream<StreamT>
301template <
class StreamT>
302 requires detail::InheritsBasicOStream<StreamT>
309template <
class StreamT>
310 requires detail::InheritsBasicOStream<StreamT>
317template <
class StreamT>
318 requires detail::InheritsBasicOStream<StreamT>
325template <
class StreamT>
326 requires detail::InheritsBasicOStream<StreamT>
333template <
class StreamT>
334 requires detail::InheritsBasicOStream<StreamT>
341template <
class StreamT>
342 requires detail::InheritsBasicOStream<StreamT>
349template <
class StreamT>
350 requires detail::InheritsBasicOStream<StreamT>
357template <
class StreamT>
358 requires detail::InheritsBasicOStream<StreamT>
365template <
class StreamT>
366 requires detail::InheritsBasicOStream<StreamT>
373template <
class StreamT>
374 requires detail::InheritsBasicOStream<StreamT>
377 std::size_t
len = std::char_traits<char>::length(
s);
382template <
class StreamT>
383 requires detail::InheritsBasicOStream<StreamT>
386 const char*
data = std::bit_cast<const char*>(
s);
387 std::size_t
len = std::char_traits<char>::length(
data);
392template <
class StreamT>
393 requires detail::InheritsBasicOStream<StreamT>
396 const char*
data = std::bit_cast<const char*>(
s);
397 std::size_t
len = std::char_traits<char>::length(
data);
402template <
class StreamT>
403 requires detail::InheritsBasicOStream<StreamT>
406 os.put_data(
s.data(),
s.size());
410template <
class StreamT>
411 requires detail::InheritsBasicOStream<StreamT>
414 os.put_data(
s.data(),
s.size());
418template <
class StreamT>
419 requires detail::InheritsBasicOStream<StreamT>
427 os.put_num(
ec.value());
432template <
class StreamT,
class T>
433 requires (detail::InheritsBasicOStream<StreamT> &&
434 std::is_rvalue_reference_v<StreamT&&>)
438 return static_cast<StreamT&&
>(os);