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 ***

Reply via email to