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

--- Comment #2 from Daniel <daniel-dev at hotmail dot de> ---
Just some observations:

There was a similar discussion in

https://stackoverflow.com/questions/75443227/static-assert-on-an-ill-formed-no-diagnostic-required-expression


Note that if we use anything else which leads to the ill-formed expression for
T::b itself, e.g. B&, B*, int - gcc compiles without errors:

struct B {
    const bool b = true;
};

template <typename T>
concept C = T::b;

static_assert( !C<B*> );
static_assert( !C<B&> );
static_assert( !C<int> );

https://gcc.godbolt.org/z/9c6YW1vWe

I would expect (at least as a user) the same behaviour for static_assert(!C<B>)
too, in that case.

So gcc seems to consider T::b (with T=b) in this context as a well-formed
expression, but not a constant expression.

Looks strange.

Reply via email to