#include <iostream>


struct test_t{
    int value;

    test_t(){
        std::cerr << __PRETTY_FUNCTION__ << '\n';
    }


    test_t(int&& val) : value{std::move(val)}{
        std::cerr << __PRETTY_FUNCTION__ << '\n';
    }


    test_t(const test_t& rhs) : value{rhs.value}{
        std::cerr << __PRETTY_FUNCTION__ << '\n';
    }


    test_t& operator= (const test_t& rhs){
        std::cerr << __PRETTY_FUNCTION__ << '\n';
        value = rhs.value;
        return *this;
    }


    test_t(test_t&& rhs) : value{std::move(rhs.value)}{
        std::cerr << __PRETTY_FUNCTION__ << '\n';
    }


    test_t& operator= (test_t&& rhs){
        std::cerr << __PRETTY_FUNCTION__ << '\n';
        value = std::move(rhs.value);
        return *this;
    }

    ~test_t(){
        std::cerr << __PRETTY_FUNCTION__ << '\n';
    }
};


#include <vector>

int main(){
    std::vector<test_t> container;

    for(int n=0; n!=3; ++n) {
        std::cout << n << '\n';
        container.emplace_back();
    }
}
