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

Daniil Dudkin <dudkindaniilm2 at yandex dot ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|INVALID                     |---
             Status|RESOLVED                    |REOPENED

--- Comment #5 from Daniil Dudkin <dudkindaniilm2 at yandex dot ru> ---

(In reply to Patrick Palka from comment #4)
> GCC's behaviour is correct, I think.  Since the concept constant_expression
> doesn't use its template parameter, the normal form of foo's associated
> constraint is just 'true (with an empty parameter mapping)', so the
> satisfaction value of with_value_constant<T> for any T is trivially true and
> independent of T.


No, I don't think that GCC behaviour is correct. 

http://eel.is/c++draft/temp.constr#atomic-3

> If substitution results in an invalid type or expression, the constraint is 
> not satisfied.

The substitution with_value_constant<WithNotConstant::value> results in an
invalid expression because WithNotConstant::value is not a constant expression,
so it cannot be used as a non-type template argument. That means
with_value_constant<WithNotConstant::value> should be false regardless how
with_value_constant is defined.

Reply via email to