23 Mar
2018
23 Mar
'18
4:01 p.m.
Andrzej Krzemienski wrote:
const auto& x = func0().value(); ... I am convinced that you are hitting an UB. Temporary returned by func0() is destroyed in the first line.
Interesting question. value() && returns T&&. The auto const& reference can't bind directly to T&&, because that's not an lvalue. So a temporary value of type T is created, and the auto const& binds to that, extending its life. That's of course assuming I read http://eel.is/c++draft/dcl.init.ref correctly.