As far as i know, a copy constructor is invoked in the following scenarios :
1) Pass by value 2) Return by value 3) When you create and initialize a new obje
In your exampe the structure is small enough therefore it is passed through a register. The generated code is similar to Return value optimization. Construct a more complicated example, and you'll see the behavior expected.