Jonathan Wakely <jwakely.gcc@xxxxxxxxx> writes: | On 3 November 2011 16:17, Jonathan Wakely wrote: >> >> Something like ... >> >> template<typename Moveable> >> struct PretendToBeCopyable >> { >> explicit PretendToBeCopyable(Moveable&& m) : m(m) {} > | Oops, that mem-initializer would need to be m(std::move(m)) This is the wrapper I ended up with. I had to remove the throw, it triggered all the time. template<typename Moveable> struct PretendToBeCopyable { explicit PretendToBeCopyable(Moveable&& m) : m(std::move(m)) {} PretendToBeCopyable(PretendToBeCopyable&&) = default; PretendToBeCopyable(PretendToBeCopyable& p) : m(std::move(p.m)) {} void operator()() { m(); } private: Moveable m; }; } -- Lgb