https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109763
--- Comment #9 from Jason Liam <jlame646 at gmail dot com> --- (In reply to Andrew Pinski from comment #8) > Gcc correctly accepts this: > template <int t> constexpr bool d = true; > template < typename T > > concept test = d<T::value>; > > Without a typename as T::value here refers to a value for the non-type > template argument. I see. ------------------------------- Anyways, for my original example, [temp.constr.normal]: > The normal form of a concept-id C<A1, A2, ..., An> is the normal form of the > constraint-expression of C, after substituting A1, A2, ..., An for C’s respective template parameters in the parameter mappings in each atomic constraint. If any such substitution results in an invalid type or expression, the program is ill-formed; no diagnostic is required.