https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116106
Patrick Palka <ppalka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution|--- |DUPLICATE
--- Comment #2 from Patrick Palka <ppalka at gcc dot gnu.org> ---
> I bet this is because we see the concepts not actually using any template
> arguments (or at least not using the argument to which typename T::type is
> passed if it was modified to depend on another template parameter), so create
> a NULL mapping (or one where T is not mentioned) and then when using the
> concept don't add that mapping even when unused.
Exactly, so substitution into 'typename T::type' never occurs. I think we're
behaving correctly here according to the standard and it's other compilers that
aren't following the standard precisely. There's an open PR about this
PR102419.
A workaround is to make the concept trivially depend on the template parameter,
e.g.
concept C = requires { typename T; };
*** This bug has been marked as a duplicate of bug 102419 ***