Я построил этот эксперимент сегодня, ответив на некоторый вопрос
struct A {
bool &b;
A(bool &b):b(b) { }
~A() { std::cout << b; }
bool yield() { return true; }
};
bool b = A(b).yield();
int main() { }
b
имеет значение false
(результат нулевой инициализации) перед установкой для него true
динамической инициализацией. Если временное будет уничтожено до завершения инициализации b
, мы напечатаем false
, в противном случае true
.
В спецификации сказано, что временное уничтожается в конце полного выражения. Похоже, это не происходит при инициализации b
. Поэтому мне интересно
false
, так и true
в разных прогонах? Clang печатает false
для вышеизложенного, в то время как GCC выводит истину
. Это меня смущает. Я пропустил какой-то текст спецификации, определяющий порядок?