https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97399
Patrick Palka <ppalka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |ppalka at gcc dot gnu.org CC| |ppalka at gcc dot gnu.org --- Comment #4 from Patrick Palka <ppalka at gcc dot gnu.org> --- The alias template in the reduced testcase is a red herring, the ICE can be reproduced without it: template <bool> struct enable_if_t {}; struct tmp { template <class> static constexpr bool is_integral(); template <class E> static auto func(E, E) -> enable_if_t<tmp::is_integral<E>()>; }; template <class> constexpr bool tmp::is_integral() { return true; } int main() { tmp::func(1, 0); } Looks like the problematic hunk from r9-5972 is --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2096,7 +2096,8 @@ finish_qualified_id_expr (tree qualifying_class, { /* See if any of the functions are non-static members. */ /* If so, the expression may be relative to 'this'. */ - if (!shared_member_p (expr) + if ((type_dependent_expression_p (expr) + || !shared_member_p (expr)) && current_class_ptr && DERIVED_FROM_P (qualifying_class, current_nonlambda_class_type ()))