| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- //
- // vairant.cpp
- // variant
- //
- // Created by Sam Jaffe on 1/30/16.
- // Copyright © 2016 Sam Jaffe. All rights reserved.
- //
- #include "variant.hpp"
- #include <iostream>
- struct test{
- int * holder;
- test() {
- std::cout << "test()" << std::endl;
- holder = new int();
- }
-
- test(test&& old) : holder(nullptr) {
- std::cout << "test(test&&)" << std::endl;
- std::swap(holder,old.holder);
- }
- test(const test& old) {
- std::cout << "test(const test&)" << std::endl;
- holder = new int(*old.holder);
- }
- ~test()
- {
- std::cout << "~test()" << std::endl;
- delete holder;
- }
- };
- int main() {
- using my_var = variant<std::string, test>;
-
- my_var d{};
-
- d.set<std::string>("First string");
- std::cout << d.get<std::string>() << std::endl;
-
- d.set<test>();
- *d.get<test>().holder = 42;
-
- my_var e(std::move(d));
- std::cout << *e.get<test>().holder << std::endl;
-
- *e.get<test>().holder = 43;
-
- d = e;
-
- std::cout << *d.get<test>().holder << std::endl;
- }
|