В приведенном ниже примере я хочу выяснить, почему конструктор копирования не вызывается, когда я возвращаю автоматическую переменную из функции doit(). Я понимаю, что первая версия обработчика вызывается, потому что у нас есть временный объект, но не могу понять, почему конструктор копирования не вызывается при создании этого временного объекта (копирует все из s во временный объект).
#include <iostream>
using namespace std;
class S{
public:
S(){std::cout<<"Constructor\n";}
S(const S& s){std::cout<<"Copy Constructor\n";}
~S(){std::cout<<"Destructor\n";}
};
S doit(){
S s;
return s;
}
void handler(S&& r){
std::cout<<"Here\n";
}
void handler(const S& r){
std::cout<<"Here2\n";
}
int main() {
handler(doit());
}