Понимание примера преобразования lvalue в rvalue

Мне трудно понять, как этот код (пример из проекта стандарта C ++ 14[Conv.lval]) вызывает неопределенное поведение дляg(false), Почемуconstexpr сделать программу действительной?

Кроме того, что это значит "не доступy.n"? В обоих звонкахg() мы возвращаемn элемент данных, так почему последняя строка говорит, что не имеет к нему доступа?

struct S { int n; };
auto f() {
    S x { 1 };
    constexpr S y { 2 };
    return [&](bool b) { return (b ? y : x).n; };
}
auto g = f();
int m = g(false); // undefined behavior due to access of x.n outside its
                  // lifetime
int n = g(true);  // OK, does not access y.n

Ответы на вопрос(1)

Ваш ответ на вопрос