|
quill
|
Codec contract notes (apply to this primary template and every specialization, including those in the quill/std headers): More...
#include <Codec.h>
Static Public Member Functions | |
| QUILL_NODISCARD static QUILL_ATTRIBUTE_HOT size_t | compute_encoded_size (QUILL_MAYBE_UNUSED detail::SizeCacheVector &conditional_arg_size_cache, QUILL_MAYBE_UNUSED Arg const &arg) noexcept |
| static QUILL_ATTRIBUTE_HOT void | encode (std::byte *&buffer, QUILL_MAYBE_UNUSED detail::SizeCacheVector const &conditional_arg_size_cache, QUILL_MAYBE_UNUSED uint32_t &conditional_arg_size_cache_index, Arg const &arg) noexcept |
| static auto | decode_arg (std::byte *&buffer) |
| static void | decode_and_store_arg (std::byte *&buffer, DynamicFormatArgStore *args_store) |
Codec contract notes (apply to this primary template and every specialization, including those in the quill/std headers):
compute_encoded_size() and encode() are intentionally NOT declared noexcept when they delegate to a nested Codec<T>. User-provided codecs (DirectFormatCodec, hand-written formatters, container element codecs that touch fs::path, std::wstring conversions, etc.) may throw at the frontend hot path. Marking the wrapper noexcept would turn that into std::terminate via the noexcept boundary. The exception propagates back through log_statement() and is reported via BackendWorker error_notifier on the backend side.
Leaf specializations that only memcpy arithmetic/enum/raw-pointer payloads keep noexcept — they cannot throw.typename = void for specializations with enable_if
1.8.13