Namespaces
Variants

std::experimental::ranges:: exchange

From cppreference.net
Определено в заголовочном файле <experimental/ranges/utility>
template < MoveConstructible T, class U = T >

requires Assignable < T & , U >

constexpr T exchange ( T & obj, U && new_val ) noexcept ( /* see below */ ) ;
(ranges TS)

Заменяет значение obj на new_value и возвращает старое значение obj , как если бы

T old_value = std::move(obj);
obj = std::forward<U>(new_value);
return old_value;

Содержание

Параметры

obj - объект, значение которого нужно заменить
new_value - значение для присваивания obj

Возвращаемое значение

Старое значение obj .

Исключения

noexcept спецификация:
noexcept ( std:: is_nothrow_move_constructible < T > :: value &&
std:: is_nothrow_assignable < T & , U > :: value )

Пример

Смотрите также

(C++14)
заменяет аргумент новым значением и возвращает его предыдущее значение
(шаблон функции)