moved.h 605 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #pragma once
  2. #include <util/generic/utility.h>
  3. template <typename T>
  4. class TMoved {
  5. private:
  6. mutable T Value;
  7. public:
  8. TMoved() {
  9. }
  10. TMoved(const TMoved<T>& that) {
  11. DoSwap(Value, that.Value);
  12. }
  13. TMoved(const T& that) {
  14. DoSwap(Value, const_cast<T&>(that));
  15. }
  16. void swap(TMoved& that) {
  17. DoSwap(Value, that.Value);
  18. }
  19. T& operator*() {
  20. return Value;
  21. }
  22. const T& operator*() const {
  23. return Value;
  24. }
  25. T* operator->() {
  26. return &Value;
  27. }
  28. const T* operator->() const {
  29. return &Value;
  30. }
  31. };