Понимание примера преобразования 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