[Перевод] Почему C++ считает мой класс копируемым, если его нельзя скопировать?
Рассмотрим следующий сценарий: template<typename T> struct Base { // Есть конструктор по умолчанию Base() = default; // Некопируемый Base(Base const &) = delete; }; template<typename T> struct Derived : Base<T> { Derived() = default; Derived(Derived const& d) : Base<T>(d) {} }; // Это assertion выполняется? static_assert( std::is_copy_constructible_v<Derived<int>>); Почему выполняется это assertion? Очевидно, что скопировать Derived<int> нельзя, ведь при этом мы попытаемся скопировать некопируемый Base<int> . И в самом деле, если попробовать скопировать его, то мы получим ошибку.