
Frank Mori Hess:
On Thursday 09 October 2008 11:32 am, Sebastian Redl wrote:
dariomt@gmail.com wrote:
I see that operator== and operator!= are implemented comparing the pointer inside the shared_ptr's using get(), but operator< uses _internal_less, that does a different thing.
I thought that operator< would also be implemented using get(), so please, can you share the rationale behind the need for _internal_less?
get() returns px (the raw pointer), _internal_less compares pn (the shared_count).
This is peculiar, since it means that alias pointers to different subobjects would compare non-equal, but sort equivalent. I'd like to know the rationale of this, too.
There is a rationale in n1590.
Which is http://open-std.org/JTC1/SC22/WG21/docs/papers/2004/n1590.html At the last meeting, the committee accepted Herve Broenimann's proposal http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2637.pdf to change std::shared_ptr's operator< to compare get(). I don't particularly like the specifics of that paper, but we'll probably need to change boost::shared_ptr (and weak_ptr) to match.