...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
BOOST_MOVE_RET
// In header: <boost/move/core.hpp>
BOOST_MOVE_RET(RET_TYPE, REF)
This macro is used to achieve portable move return semantics. The Standard allows implicit move returns when the object to be returned is designated by an lvalue and:
The criteria for elision of a copy operation are met OR
The criteria would be met save for the fact that the source object is a function parameter
For C++11 conforming compilers this macros only yields to REF: return BOOST_MOVE_RET(RET_TYPE, REF);
-> return REF;
For compilers without rvalue references this macro does an explicit move if the move emulation is activated and the return type (RET_TYPE) is not a reference.
For non-conforming compilers with rvalue references like Visual 2010 & 2012, an explicit move is performed if RET_TYPE is not a reference.
Caution: When using this macro in a non-conforming or C++03 compilers, a move will be performed even if the C++11 standard does not allow it (e.g. returning a static variable). The user is responsible for using this macro only used to return local objects that met C++11 criteria.