https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109181
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Patrick Palka from comment #3) > A workaround is to just remove the unneeded 'template' after the :: in this > case. Or is there an example where the template keyword is needed that we > incorrectly reject? I could not find an example. I did find an example where the template is removed clang rejects it but gcc does not: struct A { template<typename> using B = int; }; template<typename T> T C(); template<typename T> bool go = requires{typename decltype(C<T>())::template B<T>;}; bool a = go<int>;