Here is my source code:
#include <iostream>
#include <memory>
#include <vector>
using namespace std;
class Copy {
public:
    Copy() {
        cout << "Constructor called" << endl;
    };
    Copy(const Copy& copy) {
        cout << "Copy constructor called" << endl;
    }
    Copy& operator=(Copy copy) {
        cout << "Copy-Assign constructor called" << endl;
        return *this;
    }
    Copy(Copy &©) noexcept {
        cout << "Move constructor called" << endl;
    }
    Copy& operator=(Copy &©) noexcept {
        cout << "Move-Assign constructor called" << endl;
        return *this;
    }
    ~Copy() {
        cout << "Destructor called" << endl;
    }
};
Copy TestCopy() {
    Copy cop;
    return cop;
}
vector<Copy> TestCopyVector() {
    vector<Copy> copyVector = vector<Copy>{Copy()};
    return copyVector;
}
int main()
{
    Copy cop = TestCopy();
    //TestCopy();
    //vector<Copy> copyVector = TestCopyVector();
    return 0;
}
In My understanding the line
Copy cop = TestCopy();
Should call Copy's move-assignment. While the output is like bellow:
$ ./test 
Constructor called
Destructor called
Could you anybody help explain this? Thanks.
 
    