variant.cpp 1003 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //
  2. // vairant.cpp
  3. // variant
  4. //
  5. // Created by Sam Jaffe on 1/30/16.
  6. // Copyright © 2016 Sam Jaffe. All rights reserved.
  7. //
  8. #include "variant.hpp"
  9. #include <iostream>
  10. struct test{
  11. int * holder;
  12. test() {
  13. std::cout << "test()" << std::endl;
  14. holder = new int();
  15. }
  16. test(test&& old) : holder(nullptr) {
  17. std::cout << "test(test&&)" << std::endl;
  18. std::swap(holder,old.holder);
  19. }
  20. test(const test& old) {
  21. std::cout << "test(const test&)" << std::endl;
  22. holder = new int(*old.holder);
  23. }
  24. ~test()
  25. {
  26. std::cout << "~test()" << std::endl;
  27. delete holder;
  28. }
  29. };
  30. int main() {
  31. using my_var = variant<std::string, test>;
  32. my_var d{};
  33. d.set<std::string>("First string");
  34. std::cout << d.get<std::string>() << std::endl;
  35. d.set<test>();
  36. *d.get<test>().holder = 42;
  37. my_var e(std::move(d));
  38. std::cout << *e.get<test>().holder << std::endl;
  39. *e.get<test>().holder = 43;
  40. d = e;
  41. std::cout << *d.get<test>().holder << std::endl;
  42. }