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, или это просто недосмотр?