Re: std::exchange noexcept
От: sergii.p  
Дата: 04.11.19 14:41
Оценка: +1
Здравствуйте, _NN_, Вы писали:

_NN>На днях столкнулся с особенностью std::exchange.

_NN>Как оказывается функция не является noexcept, а почему использовать её в конструкторе перемещения нельзя.

а почему нельзя? Если вы уверены, что функция не бросит исключение, вы её вполне можете использовать в деструкторах, перемещающих конструкторах и пр. не обращая внимание есть ли там noexcept, или нет.

_NN>Очевидно напрашивается написать свой аналог exchange_no_except.


std::swap? Вообще, вопрос звучит так, как будто вам нужен именно swap.

_NN>Почему об этом не подумали в стандарте и как пишете вы ?


наверное потому что std::exchange может внутри делать копирование. И тогда noexcept точно не поставишь. Можно было бы извращаться, написать кучу перегрузок и в каких-то случаях поставить вожделенный noexcept, но подозреваю что не очень то и надо.

std::string some_value, new_value;
auto old_value = std::exchange(some_value, new_value); // вот тут может быть брошено исключение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.