forked from boostorg/move
Added BOOST_MOVE_RET
This commit is contained in:
+71
-3
@@ -11,6 +11,7 @@
|
||||
#include <boost/move/detail/config_begin.hpp>
|
||||
#include <boost/move/utility.hpp>
|
||||
#include "../example/movable.hpp"
|
||||
#include "../example/copymovable.hpp"
|
||||
#include <boost/static_assert.hpp>
|
||||
|
||||
movable function(movable m)
|
||||
@@ -57,11 +58,41 @@ void function_ref(const movable &)
|
||||
void function_ref(BOOST_RV_REF(movable))
|
||||
{}
|
||||
|
||||
struct copyable
|
||||
{};
|
||||
|
||||
movable create_movable()
|
||||
{ return movable(); }
|
||||
|
||||
template<class Type>
|
||||
struct factory
|
||||
{
|
||||
Type operator()() const
|
||||
{
|
||||
Type t;
|
||||
return BOOST_MOVE_RET(Type, t);
|
||||
}
|
||||
};
|
||||
|
||||
template<class Type>
|
||||
struct factory<Type &>
|
||||
{
|
||||
static Type t;
|
||||
Type &operator()() const
|
||||
{
|
||||
return BOOST_MOVE_RET(Type&, t);
|
||||
}
|
||||
};
|
||||
|
||||
template<class Type>
|
||||
Type factory<Type&>::t;
|
||||
|
||||
template <class R, class F>
|
||||
R factory_wrapper(F f)
|
||||
{
|
||||
// lock();
|
||||
R r = f();
|
||||
// unlock();
|
||||
return BOOST_MOVE_RET(R, r);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
@@ -78,35 +109,72 @@ int main()
|
||||
movable m2(boost::move(m));
|
||||
movable m3(function(movable(boost::move(m2))));
|
||||
movable m4(function(boost::move(m3)));
|
||||
(void)m;(void)m2;(void)m3;(void)m4;
|
||||
}
|
||||
{
|
||||
movable m;
|
||||
movable m2(boost::move(m));
|
||||
movable m3(functionr(movable(boost::move(m2))));
|
||||
movable m4(functionr(boost::move(m3)));
|
||||
(void)m;(void)m2;(void)m3;(void)m4;
|
||||
}
|
||||
{
|
||||
movable m;
|
||||
movable m2(boost::move(m));
|
||||
movable m3(function2(movable(boost::move(m2))));
|
||||
movable m4(function2(boost::move(m3)));
|
||||
(void)m;(void)m2;(void)m3;(void)m4;
|
||||
}
|
||||
{
|
||||
movable m;
|
||||
movable m2(boost::move(m));
|
||||
movable m3(function2r(movable(boost::move(m2))));
|
||||
movable m4(function2r(boost::move(m3)));
|
||||
(void)m;(void)m2;(void)m3;(void)m4;
|
||||
}
|
||||
{
|
||||
movable m;
|
||||
movable m2(boost::move(m));
|
||||
movable m3(move_return_function());
|
||||
(void)m;(void)m2;(void)m3;
|
||||
}
|
||||
{
|
||||
movable m;
|
||||
movable m2(boost::move(m));
|
||||
movable m3(move_return_function2());
|
||||
(void)m;(void)m2;(void)m3;
|
||||
}
|
||||
{
|
||||
//movable
|
||||
movable m (factory_wrapper<movable>(factory<movable>()));
|
||||
m = factory_wrapper<movable>(factory<movable>());
|
||||
movable&mr(factory_wrapper<movable&>(factory<movable&>()));
|
||||
movable&mr2 = factory_wrapper<movable&>(factory<movable&>());
|
||||
(void)mr;
|
||||
(void)mr2;
|
||||
(void)m;
|
||||
}
|
||||
{
|
||||
//copyable
|
||||
copyable c (factory_wrapper<copyable>(factory<copyable>()));
|
||||
c = factory_wrapper<copyable>(factory<copyable>());
|
||||
copyable&cr(factory_wrapper<copyable&>(factory<copyable&>()));
|
||||
copyable&cr2 = factory_wrapper<copyable&>(factory<copyable&>());
|
||||
(void)cr;
|
||||
(void)cr2;
|
||||
(void)c;
|
||||
}
|
||||
|
||||
{
|
||||
//copy_movable
|
||||
copy_movable c (factory_wrapper<copy_movable>(factory<copy_movable>()));
|
||||
c = factory_wrapper<copy_movable>(factory<copy_movable>());
|
||||
copy_movable&cr(factory_wrapper<copy_movable&>(factory<copy_movable&>()));
|
||||
copy_movable&cr2 = factory_wrapper<copy_movable&>(factory<copy_movable&>());
|
||||
(void)cr;
|
||||
(void)cr2;
|
||||
(void)c;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user