Hi. I'm trying to implement a template function that 'moves' it's parameter. Here's a simple moveable class... struct my_class { my_class() {} my_class(BOOST_RV_REF(my_class)) {} my_class& operator=(BOOST_COPY_ASSIGN_REF(my_class) c) {return *this;} BOOST_COPYABLE_AND_MOVABLE(my_class); }; And here is the function... template<typename T > void steal(BOOST_COPY_ASSIGN_REF(T) c) {} so it works fine when I do this... int main() { my_class c; steal<my_class >(c); } but not when I do this... int main() { int c; steal<int >(c); } It's as if 'int' is not a movable type which of course it trivially is. I read that Boost.Container classes are 'move aware' and I assume boost::vector<int > works, so what am I doing wrong - how to write my 'steal' function capable of moving it's argument when it's moveable class, but not breaking for primitives? Thanks, Luke (hopeful newbie!)