|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2024-12-05 16:47:38
Zach Laine wrote:
> On Thu, Dec 5, 2024 at 7:31â¯AM Peter Dimov via Boost
> <boost_at_[hidden]> wrote:
> >
> > Alexander Grund wrote:
> > > So span<void const> then or as that isn't accepted span<char const>
> > > assuming
> > > sizeof(char)==sizeof(byte)
> >
> > span<void const> doesn't exist, though. I was giving it as an example
> > of something that I would have added to the hypothetical hash2::span,
> > but no existing span library has it.
> >
> > If we limit ourselves to std::span, I suppose we can just add three
> > (or
> > four) overloads, one per byte type.
> >
> > (Four because of char8_t.)
>
> This part confuses me. It's always safe to cast to void const *; what not just
> have a single template that takes a std::span<T>, and cast it's .begin() and
> .end() to void const *?
If you mean this
template<class T> void update( std::span<T> sp );
then the reason to not use it is that you can't pass things like `string` and
`vector<unsigned char>` and `char[65536]` directly because deduction will
not work.
I'm not particularly fond of the user-facing syntax being
hash.update( std::span{buffer} );
instead of
hash.update( buffer );
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk