mirror of
https://github.com/boostorg/function.git
synced 2025-07-27 03:17:16 +02:00
Less includes from Boost.Move and more tests
This commit is contained in:
@ -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
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user