https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98059
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- We were using: template <typename T> struct S { private: S<T> (const S<T> &) = delete; S<T> operator = (const S<T> &) = delete; }; With the change we are using: template <typename T> struct S { private: S (const S &) = delete; S operator = (const S &) = delete; }; We could be using also: template <typename T> struct S { private: S (const S<T> &) = delete; S<T> operator = (const S<T> &) = delete; }; and it would be still valid C++20 (and is accepted), just the first form is not, because after DR2237 one can't use S<T> () for the constructor.