optional_test_fail_copying_a_moveable_type.cpp 844 B

123456789101112131415161718192021222324252627282930313233343536
  1. // Copyright (C) 2014, Andrzej Krzemienski.
  2. //
  3. // Use, modification, and distribution is subject to the Boost Software
  4. // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  5. // http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. // See http://www.boost.org/lib/optional for documentation.
  8. //
  9. // You are welcome to contact the author at:
  10. // akrzemi1@gmail.com
  11. //
  12. #include "boost/optional.hpp"
  13. class MoveOnly
  14. {
  15. public:
  16. int val;
  17. MoveOnly(int v) : val(v) {}
  18. MoveOnly(MoveOnly&& rhs) : val(rhs.val) { rhs.val = 0; }
  19. void operator=(MoveOnly&& rhs) {val = rhs.val; rhs.val = 0; }
  20. private:
  21. MoveOnly(MoveOnly const&);
  22. void operator=(MoveOnly const&);
  23. };
  24. //
  25. // THIS TEST SHOULD FAIL TO COMPILE
  26. //
  27. void test_copying_optional_with_noncopyable_T()
  28. {
  29. boost::optional<MoveOnly> opt1 ;
  30. boost::optional<MoveOnly> opt2(opt1) ;
  31. }