value_factory_move.cpp 939 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. Copyright 2019 Glen Joseph Fernandes
  3. (glenjofe@gmail.com)
  4. Distributed under the Boost Software License, Version 1.0.
  5. (http://www.boost.org/LICENSE_1_0.txt)
  6. */
  7. #include <boost/config.hpp>
  8. #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
  9. !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
  10. #include <boost/functional/value_factory.hpp>
  11. #include <boost/core/lightweight_test.hpp>
  12. class arg {
  13. public:
  14. explicit arg(int n)
  15. : value_(n) { }
  16. arg(arg&& a)
  17. : value_(a.value_) { }
  18. int get() const {
  19. return value_;
  20. }
  21. private:
  22. int value_;
  23. };
  24. class sum {
  25. public:
  26. explicit sum(arg&& a1, arg&& a2)
  27. : value_(a1.get() + a2.get()) { }
  28. int get() const {
  29. return value_;
  30. }
  31. private:
  32. int value_;
  33. };
  34. int main()
  35. {
  36. sum s(boost::value_factory<sum>()(arg(1), arg(2)));
  37. BOOST_TEST(s.get() == 3);
  38. return boost::report_errors();
  39. }
  40. #else
  41. int main()
  42. {
  43. return 0;
  44. }
  45. #endif