While poking at 101232 I noticed that we started trying to parse
__is_invocable(_Fn, _Args...) as a functional cast to a CTAD placeholder
type; we shouldn't consider CTAD for a template that shares a name (reserved
for the implementation) with a built-in trait.
gcc/cp/ChangeLog:
* pt.cc (ctad_template_p): Return false for trait names.
where the nested-name-specifier (if any) is non-dependent and the
template-name of the simple-template-id names a deducible template. */
+ if (DECL_CLASS_TEMPLATE_P (tmpl)
+ && IDENTIFIER_TRAIT_P (DECL_NAME (tmpl)))
+ /* Don't consider CTAD for templates with the same name as a trait; that
+ is ambiguous with e.g. __is_invocable(_Fn,_Args...). */
+ return false;
if (DECL_CLASS_TEMPLATE_P (tmpl)
|| DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl))
return true;