AK: Tweak exchange() implementation

Make it constexpr and do perfect forwarding.
This commit is contained in:
Andreas Kling 2020-04-22 11:52:26 +02:00
parent 1a7af4d677
commit a59453d4b7

View file

@ -81,14 +81,6 @@ inline T&& move(T& arg)
# pragma clang diagnostic pop
#endif
template<typename T, typename U>
inline T exchange(T& a, U&& b)
{
T tmp = move(a);
a = move(b);
return tmp;
}
template<typename T, typename U>
inline void swap(T& a, U& b)
{
@ -370,6 +362,14 @@ struct MakeUnsigned<unsigned long long> {
typedef unsigned long long type;
};
template<typename T, typename U = T>
inline constexpr T exchange(T& slot, U&& value)
{
T old_value = move(slot);
slot = forward<U>(value);
return old_value;
}
}
using AK::ceil_div;