Разве Visual C++ не выполняет оптимизацию возвращаемого значения?
#include <cstdio>
struct Foo { ~Foo() { printf("Destructing...\n"); } };
Foo foo() { return Foo(); }
int main() { foo(); }
Я компилирую и запускаю его:
cl /O2 test.cpp
test.exe
И печатает:
Уничтожение...
Уничтожение...
Почему не выполняет РВО?