|
Boost : |
Subject: Re: [boost] [AFIO] Formal review
From: Niall Douglas (s_sourceforge_at_[hidden])
Date: 2015-09-02 19:21:12
On 2 Sep 2015 at 23:20, Asbjørn wrote:
> > That's the whole point of the intermediate size_t cast. int to size_t
> > is defined behaviour, size_t to void * is defined behaviour, void *
> > to size_t is defined behaviour, size_t to int is defined behaviour.
>
> I am absolutely no expert in C++, but I was under the impression that while it's
> highly likely, it's by no means guaranteed that size_t can hold a pointer.
True. It is however true on all the platforms AFIO supports.
That is still no excuse however. size_t is for array indexes, not
addresses where a uintptr_t is a better type.
> IIRC if a platform has segmented memory then this assumption could break.
>
> In any case, uintptr_t should be available on your target compilers no? If so,
> that sounds like the better choice to me.
I've logged the issue to
https://github.com/BoostGSoC13/boost.afio/issues/117 to do just that.
> That said, as a humble Boost user, native_handle() returning void* sounds a bit
> iffy to me. Why is it a pointer if it does not point to anything but should
> rather be casted to the appropriate type by the user?
Old habits of a C programmer: void * is for any "carry maximum
information". Besides, there is form: Boost.Python defines the
standard opaque Python-can't-understand-this type as a void * (I
contributed the implementation myself a very long time ago).
Niall
-- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk