https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66841
--- Comment #1 from Andrew Sutton <andrew.n.sutton at gmail dot com> --- The program is ill-formed. In this line: requires Constructible<T, Args...>() // ERROR HERE There's no single declaration of Constructible that can be matched to those template arguments. You would need one with this signature: <typename T, typename... Args>. I think defining Constructible so that it backends into a type trait will give you the behavior you're looking for. template<typename T, typename... Args> concept bool Constructible() { return std::is_constructible<T, Args...>::value; }