Имеет ли какое-нибудь значение место, куда мы помещаем удаленное определение?
С точки зрения чистого языка, это абсолютно нулевая разница. Поиск имени и разрешение перегрузки происходят перед проверкой доступа. И попытка обратиться к удаленной функции в конце разрешения перегрузки делает вашу программу плохо сформированной, точка. Компилятор может или не может выпустить другую диагностику о доступности, но в программе уже есть ошибка, о которой необходимо сообщить.
Таким образом, вы можете поместить это удаленное определение с любой доступностью по вашему желанию. Я думаю, что большинство будет держать это в тайне, чтобы соответствовать "старой" практике создания класса, не подлежащего копированию (поместите объявление этих членов в закрытый раздел класса, а не определите их), хотя бы для того, чтобы помочь кто знает старые способы "получить его" раньше. Смесь идиом, если хотите.
Если вы хотите поддерживать режимы C ++ 03 и C ++ 11, помечать их как частные тоже нельзя. С помощью макроса можно легко создать заголовок для соответствия обоим стандартам:
#if __cplusplus >= 201103L
#define DELETED_DEFINITION = delete
#else
#define DELETED_DEFINITION
#endif
class noncopyable {
private:
// This header can be compiled as both C++11 and C++03
noncopyable(noncopyable const&) DELETED_DEFINITION;
void operator=(noncopyable const&) DELETED_DEFINITION;
};