Любой конструктор копирования, объявленный в классе (будь он закрытый, общедоступный или защищенный), означает, что компилятор не будет генерировать копию ctor по умолчанию. Является ли тот, объявленный в классе, тогда также определенным или не только контролирует, может ли код с надлежащим уровнем видимости в него копировать экземпляры класса (если не определено, то компоновщик будет жаловаться, а работа компилятора должна только жаловаться на использование без надлежащей видимости, чтобы не дублировать работу компоновщика).
Например, если вы объявляете частную копию ctor, то только код, который находится в функциях класса (или друзей, конечно), разрешается компилировать, если он пытается копировать экземпляр. Если ctor не определен, этот код, однако, не сохранится в компоновщике, так что вы все равно получите ошибку (к сожалению, чуть позже в процессе сборки, то есть, возможно, с небольшой потерей вычислительных ресурсов во время сборки по сравнению с предыдущим - обнаруженные ошибки).