https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97572
--- Comment #4 from Dimitri Gorokhovik <dimitri.gorokhovik at free dot fr> --- I probably cannot objectively tell anymore which one is better, since I just read the specification. However, subjectively, Clang's diagnostics: a) seems to have phrasing much closer to the spec, and b) contains less misleading information: -- the champion here is GCC's "error: cannot convert ‘T’ to ‘bool’" -- whereas 'T' *is*, in fact, 'bool'. (Note that this msg also has a status of a full error in its own right, not just a note.) -- arguably, a close contender is "error: ‘t’ is not a constant expression". Understanding how it can happen was hard to me. 't' looks as constant as they get with requires-local-parameters (I mean, constexpr-ness of a local-parameter here should be understood as coming only from its declaration shouldn't it?). The (S s) form of requires-local-var is a common form, so when the compiler says 's' is not a constant expression' here, how would it be constant in other situations?