I have the following simple c++ code :
class X {
public :
int x ;
X(int val) : x(val) {cout<<"one arg\n" ;}
X(const X&xx) {cout<<"const copy constr\n" ; x = xx.x ;}
X(X&xx) {cout<<"non const copy constr\n" ; x = xx.x ;}
X(const X&&xx) {cout<<"const move constr\n" ; x = xx.x ;}
X(X&&xx) {cout<<"non const move constr\n" ; x = xx.x ;}
X operator +(X &ob) {
X xx(x+ob.x) ; cout<<"add\n" ; return xx ;
}
X operator=(const X &x) {cout<<"const assign\n" ;}
X operator=(X &x) {cout<<"non const assign\n" ;}
X operator=(const X &&x) {cout<<"const move assign\n" ;}
X operator=(X &&x) {cout<<"non const move assign\n" ;}
} ;
main() {
X x1(10), x2(x1) ;
cout<<"$$$$$$$$$$$$$$\n" ;
X x3 = x1+x2 ;//does not invoke move/copy constr ---> do not know why
cout<<"###########"<<x3.x<<endl ;
cout<<"$$$$$$$$$$$$$$\n" ;
vector<X> v ;
v.push_back(X(100)) ;//invokes move constr
}
Via which constructor is the object x3 created ?