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>
158 char*
buf = prepare_space(1);
165 return get_derived();
168template <
class DerivedT>
172 return get_derived();
175template <
class DerivedT>
181 =
dec_digits(std::numeric_limits<T>::max()) + std::is_signed_v<T>;
191 if constexpr (std::is_signed_v<T>) {
202 relinquish_space(end -
buf);
207 return get_derived();
210template <
class DerivedT>
212 requires std::floating_point<T>
219 relinquish_space(end -
buf);
229 buf = prepare_space(consumed);
233 relinquish_space(consumed);
239 return get_derived();
242template <
class DerivedT>
248template <
class DerivedT>
254template <
class StreamT>
262template <
class StreamT>
263 requires detail::InheritsBasicOStream<StreamT>
270template <
class StreamT>
271 requires detail::InheritsBasicOStream<StreamT>
278template <
class StreamT>
279 requires detail::InheritsBasicOStream<StreamT>
286template <
class StreamT>
287 requires detail::InheritsBasicOStream<StreamT>
294template <
class StreamT>
295 requires detail::InheritsBasicOStream<StreamT>
302template <
class StreamT>
303 requires detail::InheritsBasicOStream<StreamT>
310template <
class StreamT>
311 requires detail::InheritsBasicOStream<StreamT>
318template <
class StreamT>
319 requires detail::InheritsBasicOStream<StreamT>
326template <
class StreamT>
327 requires detail::InheritsBasicOStream<StreamT>
334template <
class StreamT>
335 requires detail::InheritsBasicOStream<StreamT>
342template <
class StreamT>
343 requires detail::InheritsBasicOStream<StreamT>
350template <
class StreamT>
351 requires detail::InheritsBasicOStream<StreamT>
358template <
class StreamT>
359 requires detail::InheritsBasicOStream<StreamT>
366template <
class StreamT>
367 requires detail::InheritsBasicOStream<StreamT>
374template <
class StreamT>
375 requires detail::InheritsBasicOStream<StreamT>
378 std::size_t
len = std::char_traits<char>::length(
s);
383template <
class StreamT>
384 requires detail::InheritsBasicOStream<StreamT>
387 const char*
data = std::bit_cast<const char*>(
s);
388 std::size_t
len = std::char_traits<char>::length(
data);
393template <
class StreamT>
394 requires detail::InheritsBasicOStream<StreamT>
397 const char*
data = std::bit_cast<const char*>(
s);
398 std::size_t
len = std::char_traits<char>::length(
data);
403template <
class StreamT>
404 requires detail::InheritsBasicOStream<StreamT>
407 os.put_data(
s.data(),
s.size());
411template <
class StreamT>
412 requires detail::InheritsBasicOStream<StreamT>
415 os.put_data(
s.data(),
s.size());
419template <
class StreamT>
420 requires detail::InheritsBasicOStream<StreamT>
428 os.put_num(
ec.value());
433template <
class StreamT,
class T>
434 requires(detail::InheritsBasicOStream<StreamT> && std::is_rvalue_reference_v<StreamT &&>)
438 return static_cast<StreamT&&
>(os);