
----- Original Message ----- From: "Ion Gaztañaga" <igaztanaga@gmail.com> To: <boost@lists.boost.org> Sent: Friday, January 09, 2009 9:15 PM Subject: Re: [boost] C++03 unique_ptr emulation
David Abrahams wrote:
So you're saying, in other words, that "move(x)" really means "you have permission to move x" but the one I proposed would mean "move it, now."
OK, good point.
So what about this horrible little proposal?
template <class T> struct rv<T> : T { private: rv(); ~rv(); rv(rv const&); void operator=(rv const&); };
template <class T> boost::enable_if<is_class<T>, rv<T>&> move(T& x) { return static_cast<rv<T>& >(x); }
Does that solve any problems?
How can that work? What would you need to add to T? Disable non-const copy constructor?
Yeah, I know it's not theoretically portable, but it should be portable in practice. Especially when it comes to emulating language features, I care less and less about the letter of the law :-)
I would be really interested in this proposal.
Attaced it is your move_test adapted to the new proposal. It works on more cases than before. Define ALT1to come back to the preceding definition of move and rv. Thanks, Vicente