#include <iostream>    
    #include <vector>

    class A{
    public:
        A(int i){
            std::cout << "Constructor "<< i <<std::endl;
            for(int l = 0; l<i;l++){
                vec.push_back(l);
            }
        };
    
        A(A && ref): vec(std::move(ref.vec))
        {
           std::cout << "Move constructor"<<std::endl;
        }
    
        A & operator=(A && ref){
           if(this != &ref){
                vec = std::move(ref.vec);
           }
           std::cout << "Move assignment"<<std::endl;
           return *this;
    
        }
    
        std::vector<int> vec;
    
    private:
        A(const A & ref);
        A(A & ref);
        A & operator=(A & ref);
    };


    A makeA(){
        A a(3);
        return a;
    }
    
    int main(){
        A b1(makeA()) ;
        A b2 = makeA();
        A b3 = A(3);
        A b4(A(3));
        std::cout << b4.vec[2] << std::endl;
    };