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