defines a non-default destructor and a copy constructor but does not define a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions]
Мне не улыбается каждый special member прописывать ручками = delete, есть же таблица, по которой они сами правильно отваливаются (т. е. не генерятся компилятором), зачем заставлять меня делать дурную работу.
Вот мы обсуждали правила определения special member functions, и ворнинг Clang-Tidy, который насаждает эти правила. Я пытаюсь следовать, но иногда попадаются ситуации, когда не определять special member - это единственно правильное поведение, а clang ругается. Класс (итератор) со ссылкой внутри, поэтому у него implicitly deleted move assignment. Если не определять его - то всё ОК, вызывается копирование. Определить = default нельзя (другой ворнинг), а определить = delete- код перестает компилиться.
А почему тебе в итераторе вообще нужны специальные члены?
чтобы assert вписать
Да, и почему delete всё ломает?
потому присваивание из rvalue тогда не компилится
Но ведь для него и оператор копирования подходит, может быть у тебя получается так что оператор перемещения удалён, а оператор копирования не определён?
оператор копирования определен явно
Обсуждают сегодня