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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org,
                   |                            |jason at gcc dot gnu.org,
                   |                            |nathan at gcc dot gnu.org

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I think for this to work the NRV optimization would need to happen very early
so that we see that the c3.m_ptr field is actually &c3.m_value rather than
&<temporary>.m_value for a temporary that will be later on NVR optimized to the
RESULT_DECL and eventually to c3.  If you do:
void
foo ()
{
  constexpr auto c_4 = make_instance(34);
}
clang++ rejects it too.  So the question is, does the standard mandate NRV to
happen here in the c_3 case and when the NRV optimization happens wrt.
constexpr evaluation.

Reply via email to