http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46732
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> 2010-12-01 14:03:39 UTC --- (In reply to comment #4) > GCC 4.4 predates that issue being resolved, so the only real workaround is to > avoid using -std=c++0x with GCC 4.4 Or do something like I did for std::move in my initial implementation of std::future, which returned scalars by value rather than by rvalue-reference: // workaround for CWG issue 664 and c++/34022 template<typename _Result, bool = is_scalar<_Result>::value> struct _Move_future_result { typedef _Result&& __rval_type; static _Result&& _S_move(_Result& __res) { return std::move(__res); } }; // specialization for scalar types returns rvalue not rvalue-reference template<typename _Result> struct _Move_future_result<_Result, true> { typedef _Result __rval_type; static _Result _S_move(_Result __res) { return __res; } }; Boost could use something like this (for GCC 4.4 with -std=c++0x only) to avoid the problem