https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67070

--- Comment #2 from Andrew Sutton <andrew.n.sutton at gmail dot com> ---
> This is a very subtle point.  It seems to me that it would be better if
> creating the normal form of a constaint stops substituting into concept bodies
> once it's clear that we're inside an atomic constraint.  So f would have a
> single atomic predicate constraint
>
>  !A<T>
>
> and then when we consider this later we try to satisfy A<B>, which fails, so
> f's constraint is satisfied and the testcase succeeds.  Though this does 
> create
> an inconsistency in argument substitution behavior across the ! operator, 
> which
> might be confusing.
>
> Any thoughts, Andrew?

I had a bug report filed against that behavior earlier this year (note
Bugzilla, just an outside email). If you stop substituting through
atomic constraints, then requirements in e..g, A<T> would not be
substituted in the immediate context. Basically, it makes any concepts
behind a ! not SFINAE friendly.

If we had a rule that allowed the evaluation of a concept in any
context, then we could avoid doing this. It would also guarantee the
ability to write;

   static_assert(C<T>);

This is probably a good issue to raise against the TS, and we should
discuss it in Kona.

Andrew

Reply via email to