The compiler is permitted to elide the call to a copy constructor when an object is returned from a function.
That is, it is not required to actually call the copy constructor: it can just construct the object to be returned in whatever place the object needs to be to be returned from the function.