[Bug c++/78209] Decltype of rvalue reference

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Nov 5 21:34:46 GMT 2020


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

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:

https://gcc.gnu.org/g:e6fd02cc6d874c523466250a1cb724e0c7af9d75

commit r11-4758-ge6fd02cc6d874c523466250a1cb724e0c7af9d75
Author: Marek Polacek <polacek@redhat.com>
Date:   Tue Nov 3 15:10:31 2020 -0500

    c++: Fix decltype(auto) deduction with rvalue ref [PR78209]

    Here's a small deficiency in decltype(auto).  [dcl.type.auto.deduct]/5:
    If the placeholder-type-specifier is of the form decltype(auto), [...]
    the type deduced for T is determined [...] as though E had been the operand
    of the decltype.  So:

      int &&i = 0;
      decltype(auto) j = i; // should behave like int &&j = i; error

    We deduce j's type in do_auto_deduction via finish_decltype_type which
    takes an 'id' argument.  Currently we compute 'id' as false, because
    stripped_init is *i (a REFERENCE_REF_P).  But it seems to me we should
    rather set 'id' to true here, by looking through the REFERENCE_REF_P,
    so that finish_decltype_type DTRT.

    gcc/cp/ChangeLog:

            PR c++/78209
            * pt.c (do_auto_deduction): If init is REFERENCE_REF_P, use its
            first operand.

    gcc/testsuite/ChangeLog:

            PR c++/78209
            * g++.dg/cpp1y/decltype-auto1.C: New test.


More information about the Gcc-bugs mailing list