#include <iostream>
#include <memory>
#include <utility>

struct Trace {
    int value;
    explicit Trace(int initial) : value{initial} {}
    ~Trace() {
        std::cout << "destroy " << value << '\n';
    }
};

int main() {
    auto a = std::make_unique<Trace>(9);
    auto b = std::make_unique<Trace>(4);
    std::cout << "before " << a->value << ' ' << b->value << '\n';
    b = std::move(a);
    std::cout << "a empty " << (a == nullptr) << '\n';
    std::cout << "b " << b->value << '\n';
    return 0;
}
