Удаленный ответ на этот вопрос об удаленном конструкторе перемещения цитирует cppreference.com как говорится, что свойство is_move_constructible должно быть успешным, если конструктор перемещения "доступен", даже если он не "полезен".
Стандарт фактически требует, чтобы перемещение-построение типа аргумента было корректным, поэтому ответ был не совсем прав.
Теперь стандарт неоднократно использует термин "доступный" в отношении конструкторов, ссылающихся на фактическую конструктивность. Например:
[C++11 8.5/6]:Для инициализации объекта типаTпо умолчанию:
- Если
Tявляется классом класса (возможно, cv-qualit) (раздел 9), вызывается конструктор по умолчанию дляT(и инициализация плохо сформирована, еслиTне имеет доступных значений по умолчанию конструктор);- if
T- тип массива, каждый элемент инициализируется по умолчанию;- в противном случае инициализация не выполняется.
Если программа вызывает инициализацию по умолчанию объекта типа const-type
T,Tдолжен быть типом класса с предоставленным пользователем конструктором по умолчанию.
Тем не менее, я не могу найти нигде в стандарте, который категорически утверждает, что delete d, явно определенный конструктор "доступен" или нет.
Другая [ненормативная] цитата, по-видимому, предполагает, что delete d-ness и accessibility ортогональны:
[C++11: 12.2/1]:[..] [Примечание: даже если нет вызова конструктора деструктора или копирования/перемещения, все семантические ограничения, такие как доступность (раздел 11) и функция удаляется (8.4.3), должны быть выполнены. [..]
- Я пропустил прохождение?
- Если нет, следует ли скорректировать страницу cppreference.com? Можете ли вы предложить лучшую формулировку?
- Должен ли стандарт быть более четким в этом отношении?