Что касается оптимизации компилятора, является ли законным и/или возможно изменить распределение кучи на распределение стека? Или это нарушит правило as-if?
Например, скажем, что это оригинальная версия кода
{
Foo* f = new Foo();
f->do_something();
delete f;
}
Может ли компилятор изменить это на следующий
{
Foo f{};
f.do_something();
}
Я бы так не подумал, потому что это имело бы последствия, если бы исходная версия полагалась на такие вещи, как пользовательские распределители. Означает ли стандарт что-то конкретно об этом?