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

--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Jason Merrill <[email protected]>:

https://gcc.gnu.org/g:93c0642bb54ee3205db666a47a06f87d6c50eff2

commit r16-6275-g93c0642bb54ee3205db666a47a06f87d6c50eff2
Author: Egas Ribeiro <[email protected]>
Date:   Thu Dec 11 13:30:49 2025 +0000

    c++: Fix ICE with functional cast to reference in template [PR123044]

    When processing a functional cast to a reference type in a template
    context, build_functional_cast_1 wasn't calling convert_from_reference.
    This left the expression with a reference type, which later triggered
    an assertion in implicit_conversion from r15-6709 that expects
    expression types to already be dereferenced.

    In contrast, cp_build_c_cast already calls convert_from_reference on
    the result in template contexts, so C-style casts like (R)x worked
    correctly.

    The fix makes functional casts consistent with C-style casts by
    calling convert_from_reference before returning in the template
    processing path.

            PR c++/123044

    gcc/cp/ChangeLog:

            * typeck2.cc (build_functional_cast_1): Call convert_from_reference
            on template CAST_EXPR to match C-style cast behavior.

    gcc/testsuite/ChangeLog:

            * g++.dg/template/implicit-func-cast.C: New test.

    Signed-off-by: Egas Ribeiro <[email protected]>
    Reviewed-by: Jason Merrill <[email protected]>

Reply via email to