https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116769
--- Comment #4 from Giuseppe D'Angelo <dangelog at gmail dot com> --- Hi, thanks for investigating. That divergence is a bit worrying, I can't quite understand what's going on. Also, all compilers seem to accept this variation, which one would naively assume "equivalent" to the previous testcase: struct NDC { NDC(int); }; template <typename T> struct Wrap { Wrap() : t() {} Wrap(const T &t) : t(t) {} T t; }; static_assert(std::is_default_constructible_v<Wrap<NDC>>);