#include <iostream>
#include <utility>

struct Plain {
    int value{0};
};

struct Defaulted {
    int value{0};
    Defaulted() = default;
    Defaulted(const Defaulted&) = default;
    Defaulted(Defaulted&&) = default;
    Defaulted& operator=(const Defaulted&) = default;
    Defaulted& operator=(Defaulted&&) = default;
};

int main() {
    Plain first{4};
    Plain second{first};
    second.value = 9;
    std::cout << first.value << ' ' << second.value << '\n';
    Defaulted original{};
    original.value = 5;
    Defaulted moved{std::move(original)};
    std::cout << original.value << ' ' << moved.value << '\n';
    return 0;
}
