Подтвердить что ты не робот

Почему Visual С++ не выполняет оптимизацию возвращаемого значения на самом тривиальном коде?

Не работает ли Visual С++ оптимизация возвращаемого значения?

#include <cstdio>
struct Foo { ~Foo() { printf("Destructing...\n"); } };
Foo foo() { return Foo(); }
int main() { foo(); }

Я компилирую и запускаю его:

cl /O2 test.cpp
test.exe

И он печатает:

...
Разрушение     Разрушение...

Почему он не выполняет RVO?

4b9b3361

Ответ 1

Когда я тестирую с этим:

#include <iostream>
struct Foo { 
    Foo(Foo const &r) { std::cout << "Copying...\n"; }
    ~Foo() { std::cout << "Destructing...\n"; }
    Foo() {}
};

Foo foo() { return Foo(); }

int main() { Foo f = foo(); }

... вывод, который я получаю:

Destructing...

Нет вызова конструктора копирования и только один из деструкторов.