116 static_assert(
sizeof(
DerivedT) >= 0,
"incomplete derived type");
117 static_assert(std::is_base_of_v<OStreamBase<DerivedT>,
DerivedT>);
118 return static_cast<DerivedT&
>(*this);
121template <
class DerivedT>
124 return get_derived().do_prepare_space(
num_bytes);
127template <
class DerivedT>
133template <
class DerivedT>
134void OStreamBase<DerivedT>::set_badbit()
136 get_derived().do_set_badbit();
139template <
class DerivedT>
149 return get_derived();
152template <
class DerivedT>
156 char*
buf = prepare_space(1);
163 return get_derived();
166template <
class DerivedT>
170 return get_derived();
173template <
class DerivedT>
179 + std::is_signed_v<T>;
189 if constexpr (std::is_signed_v<T>) {
200 relinquish_space(end -
buf);
205 return get_derived();
208template <
class DerivedT>
209template <
class T>
requires std::floating_point<T>
216 relinquish_space(end -
buf);
227 buf = prepare_space(consumed);
231 relinquish_space(consumed);
237 return get_derived();
240template <
class DerivedT>
246template <
class DerivedT>
252template <
class StreamT>
260template <
class StreamT>
261 requires detail::InheritsBasicOStream<StreamT>
268template <
class StreamT>
269 requires detail::InheritsBasicOStream<StreamT>
276template <
class StreamT>
277 requires detail::InheritsBasicOStream<StreamT>
284template <
class StreamT>
285 requires detail::InheritsBasicOStream<StreamT>
292template <
class StreamT>
293 requires detail::InheritsBasicOStream<StreamT>
300template <
class StreamT>
301 requires detail::InheritsBasicOStream<StreamT>
308template <
class StreamT>
309 requires detail::InheritsBasicOStream<StreamT>
316template <
class StreamT>
317 requires detail::InheritsBasicOStream<StreamT>
324template <
class StreamT>
325 requires detail::InheritsBasicOStream<StreamT>
332template <
class StreamT>
333 requires detail::InheritsBasicOStream<StreamT>
340template <
class StreamT>
341 requires detail::InheritsBasicOStream<StreamT>
348template <
class StreamT>
349 requires detail::InheritsBasicOStream<StreamT>
356template <
class StreamT>
357 requires detail::InheritsBasicOStream<StreamT>
364template <
class StreamT>
365 requires detail::InheritsBasicOStream<StreamT>
372template <
class StreamT>
373 requires detail::InheritsBasicOStream<StreamT>
376 std::size_t
len = std::char_traits<char>::length(
s);
381template <
class StreamT>
382 requires detail::InheritsBasicOStream<StreamT>
385 const char*
data = std::bit_cast<const char*>(
s);
386 std::size_t
len = std::char_traits<char>::length(
data);
391template <
class StreamT>
392 requires detail::InheritsBasicOStream<StreamT>
395 const char*
data = std::bit_cast<const char*>(
s);
396 std::size_t
len = std::char_traits<char>::length(
data);
401template <
class StreamT>
402 requires detail::InheritsBasicOStream<StreamT>
405 os.put_data(
s.data(),
s.size());
409template <
class StreamT>
410 requires detail::InheritsBasicOStream<StreamT>
413 os.put_data(
s.data(),
s.size());
417template <
class StreamT>
418 requires detail::InheritsBasicOStream<StreamT>
426 os.put_num(
ec.value());
431template <
class StreamT,
class T>
432 requires (detail::InheritsBasicOStream<StreamT> &&
433 std::is_rvalue_reference_v<StreamT&&>)
437 return static_cast<StreamT&&
>(os);