Less includes from Boost.Move and more tests

This commit is contained in:
Antony Polukhin
2014-10-02 15:40:33 +04:00
parent 27e9e1e372
commit df1db75294
2 changed files with 28 additions and 1 deletions

View File

@ -29,7 +29,7 @@
#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
# define BOOST_FUNCTION_ARGS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, a) # define BOOST_FUNCTION_ARGS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, a)
#else #else
# include <boost/move/move.hpp> # include <boost/move/utility_core.hpp>
# define BOOST_FUNCTION_ARG(J,I,D) ::boost::forward< BOOST_PP_CAT(T,I) >(BOOST_PP_CAT(a,I)) # define BOOST_FUNCTION_ARG(J,I,D) ::boost::forward< BOOST_PP_CAT(T,I) >(BOOST_PP_CAT(a,I))
# define BOOST_FUNCTION_ARGS BOOST_PP_ENUM(BOOST_FUNCTION_NUM_ARGS,BOOST_FUNCTION_ARG,BOOST_PP_EMPTY) # define BOOST_FUNCTION_ARGS BOOST_PP_ENUM(BOOST_FUNCTION_NUM_ARGS,BOOST_FUNCTION_ARG,BOOST_PP_EMPTY)
#endif #endif

View File

@ -46,6 +46,18 @@ only_movable two(BOOST_RV_REF(only_movable) t) {
return BOOST_MOVE_RET(only_movable, t1); return BOOST_MOVE_RET(only_movable, t1);
} }
only_movable two_sum(BOOST_RV_REF(only_movable) t1, BOOST_RV_REF(only_movable) t2) {
only_movable ret(t1.get_value() + t2.get_value());
return BOOST_MOVE_RET(only_movable, ret);
}
struct sum_struct {
only_movable operator()(BOOST_RV_REF(only_movable) t1, BOOST_RV_REF(only_movable) t2) const {
only_movable ret(t1.get_value() + t2.get_value());
return BOOST_MOVE_RET(only_movable, ret);
}
};
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
int three(std::string&&) { return 1; } int three(std::string&&) { return 1; }
std::string&& four(std::string&& s) { return boost::move(s); } std::string&& four(std::string&& s) { return boost::move(s); }
@ -67,6 +79,21 @@ int test_main(int, char*[])
BOOST_CHECK(om2_2.get_value() == 2); BOOST_CHECK(om2_2.get_value() == 2);
BOOST_CHECK(om2.is_moved()); BOOST_CHECK(om2.is_moved());
{
function <only_movable(BOOST_RV_REF(only_movable), BOOST_RV_REF(only_movable))> f2_sum = two_sum;
only_movable om1_sum(1), om2_sum(2);
only_movable om2_sum_2 = f2_sum(boost::move(om1_sum), boost::move(om2_sum));
BOOST_CHECK(om2_sum_2.get_value() == 3);
}
{
sum_struct s;
function <only_movable(BOOST_RV_REF(only_movable), BOOST_RV_REF(only_movable))> f2_sum = s;
only_movable om1_sum(1), om2_sum(2);
only_movable om2_sum_2 = f2_sum(boost::move(om1_sum), boost::move(om2_sum));
BOOST_CHECK(om2_sum_2.get_value() == 3);
}
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
function <int(std::string&&)> f3 = three; function <int(std::string&&)> f3 = three;
function <std::string&& (std::string&& s)> f4 = four; function <std::string&& (std::string&& s)> f4 = four;