Я хочу написать класс контейнера. Этот контейнер имеет метод вставки, который имеет две специализации: сначала использует конструкторы копирования для копирования данных из одного контейнера в другой контейнерный элемент. Если экземпляр конструктора создает исключение, я просто отменю все изменения в контейнере, как ничего не происходит.
Вторая специализация использует конструктор перемещения, и это место, где все осложнилось. Когда я перемещаю элементы из одного контейнера в другой элемент контейнера по элементу, перемещение конструктора может вызвать исключение. Если это произойдет - у меня очень грязное состояние, когда некоторые элементы перемещены, а другие элементы остаются в нем в оригинальных местах. Если я попытаюсь переместить элементы обратно - я могу получить другое исключение.
Можно ли написать что-то подобное безопасным образом или безопасностью исключений, а семантика перемещения взаимно исключена?