Это известно как «оптимизация возвращаемого значения». Если объект возвращается по значению, компилятор может создать его в месте, доступном для вызывающей стороны, после возврата из функции; в этом случае конструктор копирования не будет вызван.
Также разрешено обрабатывать ее как обычную автоматическую переменную и копировать по возвращении, поэтому должен быть доступен конструктор копирования. Независимо от того, вызывается он или нет, зависит от компилятора и настроек оптимизации, поэтому не стоит полагаться ни на одно из этих действий.