factory_move.cpp 990 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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/factory.hpp>
  11. #include <boost/core/lightweight_test.hpp>
  12. #include <boost/smart_ptr/scoped_ptr.hpp>
  13. class arg {
  14. public:
  15. explicit arg(int n)
  16. : value_(n) { }
  17. arg(arg&& a)
  18. : value_(a.value_) { }
  19. int get() const {
  20. return value_;
  21. }
  22. private:
  23. int value_;
  24. };
  25. class sum {
  26. public:
  27. explicit sum(arg&& a1, arg&& a2)
  28. : value_(a1.get() + a2.get()) { }
  29. int get() const {
  30. return value_;
  31. }
  32. private:
  33. int value_;
  34. };
  35. int main()
  36. {
  37. boost::scoped_ptr<sum> s(boost::factory<sum*>()(arg(1), arg(2)));
  38. BOOST_TEST(s->get() == 3);
  39. return boost::report_errors();
  40. }
  41. #else
  42. int main()
  43. {
  44. return 0;
  45. }
  46. #endif