// // vairant.cpp // variant // // Created by Sam Jaffe on 1/30/16. // Copyright © 2016 Sam Jaffe. All rights reserved. // #include "variant.hpp" #include 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; my_var d{}; d.set("First string"); std::cout << d.get() << std::endl; d.set(); *d.get().holder = 42; my_var e(std::move(d)); std::cout << *e.get().holder << std::endl; *e.get().holder = 43; d = e; std::cout << *d.get().holder << std::endl; }