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,,