Удаленный ответ на этот вопрос об удаленном конструкторе перемещения цитирует 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? Можете ли вы предложить лучшую формулировку?
- Должен ли стандарт быть более четким в этом отношении?