Illustrate, using small code fragments

a situation where copy elision is used,

 - Copy elision is used when doing for example: Demo a = factory();
   In this case the copy constructor is not called so copy elision appears

a situation where the move constructor is (or would be) used,

 - Demo b = move(a);

a situation where copy assignment is used,
 - Demo c;
   c = b;

a situation where move assignment is used.
 - Demo d;
   d = move(c);