
Dominique Devienne wrote:
On Wed, Dec 4, 2024 at 2:09 AM Claudio DeSouza via Boost
wrote: function that takes a pair of void*/size_t should be a span
or rather `std::span<[const ]std::byte>`. --DD
https://en.cppreference.com/w/cpp/types/byte https://en.cppreference.com/w/cpp/container/span/as_bytes
Or rather, the nonexistent span<void>, which is like void*, but better. N3980's (equivalent of) update takes by void const*. Originally, I had that changed to unsigned char const* (or even to byte_type const*, with the idea of switching to std::byte eventually), but this proved very cumbersome in practice. Untyped byte sequences sometimes come as char[], sometimes as unsigned char[], sometimes (if you're modern) as std::byte[], and taking by any of these means that the rest need an ugly reinterpret_cast. So I switched `update` back to void const*. The "type safety" gains aren't worth the substantial decrease in usability. (And then had to add unsigned char const* back because constexpr.) The hypothetical span<void> would take either of those three byte-like types (and maybe char8_t[] as well), so that the user doesn't need to reinterpret_cast.