https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120917
--- Comment #24 from Frank Heckenbach <f.heckenb...@fh-soft.de> --- (In reply to Jason Merrill from comment #23) > > Then yes, it does look like it should work; libstdc++ uses that 'requires > function call' pattern in > > template<typename _Tp> > concept __is_derived_from_optional = requires (const _Tp& __t) { > []<typename _Up>(const optional<_Up>&){ }(__t); > }; Thanks, the lambda makes it a bit shorter, and the knowledge that libstdc++ uses it gives me more confidence. So I'll try this: template <typename T, template <typename ...> typename P> concept DerivedFromTemplate = requires (T v) { [] <typename ... U> (const P <U ...> &) { } (v); }; When experimenting, I noticed that even g++-15 still accepts this: template <typename T> concept True = true; template <typename T> struct S; auto f (S <True auto>); I don't supposed it's meant to be accepted, is it? (If it is, I could just slam "True" in front of all of my <auto>s.) Should I file another bug report?