|
Boost : |
From: Anthony Williams (anthony_w.geo_at_[hidden])
Date: 2007-12-05 03:48:19
David Abrahams <dave <at> boost-consulting.com> writes:
> on Mon Dec 03 2007, Anthony Williams <anthony_w.geo-AT-yahoo.com> wrote:
>
> > David Abrahams <dave <at> boost-consulting.com> writes:
> >
> >> on Mon Dec 03 2007, Anthony Williams <anthony_w.geo-AT-yahoo.com> wrote:
> >>
> >>> However, I did post a message asking for a fast-track review of it so
> >>> that it
> >>> could become a documented part of boost. The only response I got was
> >>> "there's
> >>> another implementation in the sandbox".
> >>
> >> And that implementation is fatally flawed, I'm ashamed to say. We
> >> should be using http://opensource.adobe.com/group__move__related.html
> >
> > How does that help with a movable-but-not-copyable type (such as
> > boost::thread)?
>
> I'm not sure, frankly; the author of that library believes all types
> are intrinsically both movable and copiable. Maybe for that purpose
> we need something else.
Can I (again) propose the simple scheme I'm using for boost::thread?
In boost/thread/detail/move.hpp we (now) have
boost::detail::thread_move_t<T> as the transfer type
and boost::detail::thread_move(T&) as the move-from-lvalue helper
boost::thread then looks like this (move-related parts only)
class thread
{
private:
thread(thread&); // no copy. Note no const
thread& operator=(thread&); // no assign. Note no const
public:
thread(detail::thread_move_t<thread>); // move constructor
thread& operator=(detail::thread_move_t<thread>); // move assignment
operator detail::thread_move_t<thread>(); // allow conversion to the
//transfer type
detail::thread_move_t<thread> move(); // make it explicit
};
If you try and construct a thread object from an rvalue then it won't bind to
the (private) copy constructor, as it can't bind to a non-const reference.
However, a single user-defined conversion (to detail::thread_move_t<thread>)
allows it to bind to the move constructor. Likewise for assignment.
It works for gcc and MSVC, but not for Borland. When the test results come
through for the new test_thread_move test, we'll know which other compilers it
works on, too.
Anthony
-- Anthony Williams Just Software Solutions Ltd - http://www.justsoftwaresolutions.co.uk Registered in England, Company Number 5478976. Registered Office: 15 Carrallack Mews, St Just, Cornwall, TR19 7UL
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk