https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116769
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- MSVC (and EDG) return true for is_default_constructible_v<Wrap<NDC>> . Which is different from clang. So in summary we have the following 3 behaviors: * accepts the code and is_default_constructible_v<Wrap<NDC>> value is true: EDG/MSVC * accepts the code and is_default_constructible_v<Wrap<NDC>> value is false: GCC * rejects the code due to the default constructor being invalid.