https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98059
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to CVS Commits from comment #2) > Apparently vec.h doesn't build with -std=c++20/gnu++20, since the > DR2237 r11-532 change. > template <typename T> > class auto_delete_vec > { > private: > auto_vec_delete<T> (const auto_delete_vec<T> &) = delete; Ugh, I misread this as an assignment operator despite there being no operator= there at all. It's a copy ctor, and yes, it's invalid. Sorry. > }; > which vec.h uses is invalid C++20, one needs to use > auto_vec_delete (const auto_delete_vec &) = delete; The <T> is allowed on the parameter, it's only disallowed on the first one, so this would be OK too: auto_vec_delete (const auto_delete_vec<T> &) = delete; But the macro can't generate that, and there's no reason to prefer it. Sorry for the noise :-(