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

--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jason Merrill <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:74aee6d20872e8d87558eb5bf601042e3ed3fb2a

commit r11-7481-g74aee6d20872e8d87558eb5bf601042e3ed3fb2a
Author: Jason Merrill <ja...@redhat.com>
Date:   Tue Mar 2 23:59:00 2021 -0500

    c++: C++17 and decltype of multi-operator expression [PR95675]

    A call that is the immediate operand of decltype has special semantics: no
    temporary is produced, so it's OK for the return type to be e.g.
incomplete.
    But we were treating (e | f) the same way, which confused overload
    resolution when we then tried to evaluate ... | g.

    Fixed by making build_temp do what its name says, and force the C++17
    temporary materialization conversion.

    gcc/cp/ChangeLog:

            PR c++/95675
            * call.c (build_temp): Wrap a CALL_EXPR in a TARGET_EXPR
            if it didn't get one before.

    gcc/testsuite/ChangeLog:

            PR c++/95675
            * g++.dg/cpp0x/decltype-call5.C: New test.
            * g++.dg/cpp0x/decltype-call6.C: New test.

Reply via email to