https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69730
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- I suspect it's because x() returns an rvalue B (a copy) which you then instruct to return a reference to its member which you bind to x. But that copy of B dies after const double & x = a.x().value(); and thus the content of what x refers to is gone.