Константная ссылка на результат тернарного оператора

Почему программа выводит 1, а не 2?

#include <iostream>

int main() {
    int x = 1;
    const auto& y = true ? x : 1;
    x = 2;
    std::cout << y << '\n';
}

Ответы (2 шт):

Автор решения: user7860670

y - это не ссылка на x. Это ссылка на неименованный временный объект, порождаемый выражением true ? x : 1, который инициализируется либо изначальным значением x, либо литералом 1, и время жизни которого продлевается до конца области видимости ссылки.

→ Ссылка
Автор решения: AR Hovsepyan

В случаи:

int x = 1;
int z = 1;
const auto& k = true ? x : z;

ссылке присваивается то ли объект x, то ли объект z, т.е. вы получаете ожидаемое вами поведение программы.

В вашем примере ссылке присваивается то ли временный объект int(1), то ли такой же(в тернарной операции обe операнда должны быть такими же) временный объект int(x). Вот и получаете ссылку на другой объект.

→ Ссылка