Here is my code:

```
#include <iostream>

class carl{
    public:
    int x;

    carl(int y):x(y){

    }

    carl(carl&& other)
    {
    std::cout<<" cons called?"<<std::endl;
    this->x = other.x;
    other.x = 0;
    }

    void operator=(carl&& other){
    std::cout<<"operator called?"<<std::endl;
    this->x = other.x;
    other.x = 0;
    }
};

void funct(carl&& get){
std::cout<<get.x<<std::endl;    
}

int main(int argc, char** argv) {
    carl c(2);
    funct(std::move(c));
    std::cout<<c.x<<std::endl;
    return 0;
}

```

Output:

```
2
2

```

If I remember, there is a special rule for special member functions stating that, *if a class declared a move constructor/operator then that class will not automatically generate copy operators/constructors*.

Based from my example, it seems that move operators and constructors were not invoked but rather it **copied** the value. It was supposed to empty out the value of c' `x` and do the `cout` to confirm but none of that happened. Can anybody clarify what's happening with my code?