https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82110
Bug ID: 82110 Summary: Concept for default constructing works with new T, not with new T[1] Product: gcc Version: c++-concepts Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: barry.revzin at gmail dot com Target Milestone: --- This example fails with all versions of gcc currently: struct X { X() = delete; }; template <class T> concept bool C = requires(T t) { new T; }; template <class T> concept bool D = requires(T t) { new T[1]; }; int main() { static_assert(!C<X>); // ok static_assert(!D<X>); // error } new T[1] still requires a public default constructor, just like new T, but X is thought to model D (despite correctly not modeling C).