https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81420

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED
   Target Milestone|---                         |8.2

--- Comment #8 from Jason Merrill <jason at gcc dot gnu.org> ---
(In reply to Ion Lupascu from comment #7)
> Not really, The issue still persists
> 
> std::optional<double> getValue(){
...
>     const double &v = *getValue();
...
>     const double &v = getValue()->v;

Neither of these bind the reference to a prvalue; std::optional operator*
returns a reference, and operator-> returns a pointer, so in both cases we're
binding the reference to an xvalue, and GCC is correct not to extend the
temporary.

Fixed in 8.2.

Reply via email to