Стандарт С++ гарантирует, что приведенный ниже код рабочий?
#include <stdio.h>
struct Foo {
Foo() {
printf("ctor\n");
}
Foo(const Foo &) {
printf("copy ctor\n");
}
~Foo() {
printf("dctor\n");
}
void call() const {
printf("cal\n");
}
};
Foo return_local_object_1() {
Foo foo;
return foo;
}
Foo return_local_object_2() {
return return_local_object_1();
}
int main(int argc, char* argv[]) {
const Foo &foo = return_local_object_2();
foo.call();
}
И будет ли хоть раз скопирован объект foo? Код компилируется, запускается, но в стандарте не могу найти секцию, которая описывает это поведение. Если вы хорошо знакомы со стандартом, не могли бы сказать параграф, где это описано?
Спасибо.