Дается следующая сценария, которая должна интерпретироваться как код С++ 0x:
struct B { };
struct A { B b; };
int main() {
B const& b = A().b;
/* is the object still alive here? */
}
Clang и GCC (версия для стволов по состоянию на 2011/02 год) ведут себя по-другому: Clang продлевает срок службы. GCC перемещает B
в новый временный объект, а затем привязывает ссылку к этому новому временному.
Я не могу найти, что любое поведение может быть получено из слов Стандарта. Выражение A().b
не является временным (см. 5.2.5). Может кто-нибудь объяснить мне следующее?
- Желаемое поведение (цель комитета)
- Поведение, которое вы выведете из FDIS
Спасибо!