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

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppa...@gcc.gnu.org>:

https://gcc.gnu.org/g:0410b754e56c0868203c2412e0585ba070ea938d

commit r14-5331-g0410b754e56c0868203c2412e0585ba070ea938d
Author: Patrick Palka <ppa...@redhat.com>
Date:   Fri Nov 10 10:58:06 2023 -0500

    c++: decltype of (by-value captured reference) [PR79620]

    The capture_decltype handling in finish_decltype_type wasn't looking
    through implicit INDIRECT_REF (added by convert_from_reference), which
    caused us to incorrectly resolve decltype((r)) to float& below.  This
    patch fixes this, and adds an assert to outer_automatic_var_p to help
    prevent against such bugs.

    We still don't fully accept the example ultimately because for the
    decltype inside the lambda's trailing return type, at that point we're
    in lambda type scope but not yet in lambda function scope that the
    capture_decltype handling looks for (which is an orthogonal bug).

            PR c++/79620

    gcc/cp/ChangeLog:

            * cp-tree.h (STRIP_REFERENCE_REF): Define.
            * semantics.cc (outer_var_p): Assert REFERENCE_REF_P is false.
            (finish_decltype_type): Look through implicit INDIRECT_REF when
            deciding whether to call capture_decltype.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp0x/lambda/lambda-decltype3.C: New test.

    Reviewed-by: Jason Merrill <ja...@redhat.com>

Reply via email to