Index: uspace/lib/cpp/include/impl/utility.hpp
===================================================================
--- uspace/lib/cpp/include/impl/utility.hpp	(revision 8ac215d3ef9fa45981854eb3814449c8e57e1a28)
+++ uspace/lib/cpp/include/impl/utility.hpp	(revision 5abc7fd2f3a1612b5e873dd5c56d80581f7b7f90)
@@ -61,6 +61,36 @@
     }
 
-    // TODO: swap
-    // TODO: exchange
+    /**
+     * 20.2.2, swap:
+     */
+
+    template<class T>
+    void swap(T& x, T& y)
+        noexcept(is_nothrow_move_constructible<T>::value &&
+                 is_nothrow_move_assignable<T>::value)
+    {
+        T tmp{std::move(x)};
+        x = std::move(y);
+        y = std::move(tmp);
+    }
+
+    template<class T, size_t N>
+    void swap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a, *b)))
+    {
+        // TODO: Use swap_ranges(a, a + N, b); when implemented.
+    }
+
+    /**
+     * 20.2.3, exchange:
+     */
+
+    template<class T, class U = T>
+    T exchange(T& obj, U&& new_val)
+    {
+        T old_val = std::move(obj);
+        obj = std::forward<U>(new_val);
+
+        return old_val;
+    }
 
     /**
