https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94517
Bug ID: 94517 Summary: incorrect use of enable_if compiles but should not Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: soko.slav at yandex dot ru Target Milestone: --- Following code https://godbolt.org/z/Zfazdt compiles with GCC and does not compile (as expected) if the class becomes a template: https://godbolt.org/z/2KRRin It should not compile in the first case either because there is no template parameter being deduced. Sources: #include <functional> struct NoDefault { NoDefault() = delete; }; // compiles while should not struct X : public NoDefault { template < std::enable_if_t < std::is_default_constructible_v < NoDefault > >* = nullptr > X() : NoDefault{} { } }; template <class T> struct Y : public NoDefault { template < std::enable_if_t < std::is_default_constructible_v < NoDefault > >* = nullptr > Y() : NoDefault{} { } }; // expectedly does not compile template struct Y<int>;