std::exchange
, введенный в С++ 14, указан следующим образом:
template< class T, class U = T > T exchange( T& obj, U&& new_value );
Заменяет значение
obj
наnew_value
и возвращает старое значениеobj
.
Здесь возможная реализация из cppreference:
template<class T, class U = T>
T exchange(T& obj, U&& new_value)
{
T old_value = std::move(obj);
obj = std::forward<U>(new_value);
return old_value;
}
Насколько я вижу, ничего не мешает std::exchange
быть помеченным как constexpr
. Есть ли причина, по которой мне не хватает, почему она не может быть constexpr
, или это просто недосмотр?