id summary reporter owner description type status milestone component version severity resolution keywords cc 6396 Implicit instanciation of boost::rv for non-cass types generates an error danivy.mail@… Ion Gaztañaga "boost::rv unconditionally inherits from T. During overload-resolution, the compiler is allowed to instanciate parameter types even if not strictly necessary, which can lead to instanciation of rv for non-class types, causing an error. For example: {{{ #include template struct vector { void push_back(const T&) {} void push_back(BOOST_RV_REF(T)) {} }; int main() { vector v; v.push_back(123); } }}} Fails on Sun 5.12 with: {{{ ""/usr/include/boost/move/move.hpp"", line 231: Error: The base ""boost::T"" must be a previously defined class or struct. ""main.cpp"", line 12: Where: While specializing ""boost::rv"". ""main.cpp"", line 12: Where: Specialized in non-template code. }}} And {{{ #include template class wrapper { BOOST_COPYABLE_AND_MOVABLE_ALT(wrapper) public: wrapper(const T&) {} wrapper(BOOST_RV_REF(T)) {} wrapper(const wrapper&) {} wrapper(BOOST_RV_REF(wrapper)) {} }; int main() { wrapper w1(123); wrapper w2(boost::move(w1)); } }}} fails on GCC 4.4.3 with: {{{ /usr/include/boost/move/move.hpp: In instantiation of ‘boost::rv’: main.cpp:17: instantiated from here /usr/include/boost/move/move.hpp:231: error: base type ‘int’ fails to be a struct or class type }}} " Bugs closed To Be Determined move Boost 1.48.0 Problem fixed