Index: uspace/lib/cpp/include/utility
===================================================================
--- uspace/lib/cpp/include/utility	(revision e66fc6fe2bd242348f0a8f98bacec75cb0655c79)
+++ uspace/lib/cpp/include/utility	(revision 40f8328a685f4c3b53cfe8c7368b368591c9d03c)
@@ -27,147 +27,3 @@
  */
 
-namespace std
-{
-    /**
-     * 20.2.1, operators:
-     */
-    template<typename T>
-    bool operator!=(const T& lhs, const T& rhs)
-    {
-        return !(lhs == rhs);
-    }
-
-    template<typename T>
-    bool operator>(const T& lhs, const T& rhs)
-    {
-        return (rhs < lhs);
-    }
-
-    template<typename T>
-    bool operator<=(const T& lhs, const T& rhs)
-    {
-        return !(rhs < lhs);
-    }
-
-    template<typename T>
-    bool operator>=(const T& lhs, const T& rhs)
-    {
-        return !(lhs < rhs);
-    }
-
-    // TODO: swap
-    // TODO: exchange
-
-    /**
-     * 20.2.4, forward/move helpers:
-     */
-
-    template<class T>
-    inline constexpr T&& forward(remove_reference_t<T>& t) noexcept
-    {
-        return static_cast<T&&>(t);
-    }
-
-    template<class T>
-    inline constexpr T&& forward(remove_reference_t<T>&& t) noexcept
-    {
-        // TODO: check if t is lvalue reference, if it is, the program
-        //       is ill-formed according to the standard
-        return static_cast<T&&>(t);
-    }
-
-    template<class T>
-    inline constexpr remove_reference_t<T>&& move(T&&) noexcept
-    {
-        return static_cast<remove_reference_t<T>&&>(t);
-    }
-
-    /**
-     * 20.2.5, function template declval:
-     * Note: This function only needs declaration, not
-     *       implementation.
-     */
-
-    template<class T>
-    add_rvalue_reference_t<T> declval() noexcept;
-
-    /**
-     * 20.3, pairs:
-     */
-
-
-    struct piecewise_construct_t
-    {
-        explicit piecewise_construct_t() = default;
-    };
-
-    template<typename T1, typename T2>
-    struct pair
-    {
-        using first_type  = T1;
-        using second_type = T2;
-
-        T1 first;
-        T2 second;
-
-        pair(const pair&) = default;
-        pair(pair&&) = default;
-
-        constexpr pair()
-            : first{}, second{}
-        { /* DUMMY BODY */ }
-
-        constexpr pair(const T1& x, const T2& y)
-            : first{x}, second{y}
-        { /* DUMMY BODY */ }
-
-        template<typename U, typename V>
-        constexpr pair(U&& x, V&& y)
-            : first(x), second(y)
-        { /* DUMMY BODY */ }
-
-        template<typename U, typename V>
-        constexpr pair(const pair<U, V>& other)
-            : first(other.first), second(other.second)
-        { /* DUMMY BODY */ }
-
-        template<typename U, typename V>
-        constexpr pair(pair<U, V>&& other)
-            : first(forward<first_type>(other.first)),
-              second(forward<second_type>(other.second))
-        { /* DUMMY BODY */ }
-
-        /* TODO: need tuple, piecewise_construct_t
-        template<class... Args1, class... Args2>
-        pair(piecewise_construct_t, tuple<Args1...> first_args, tuple<Args2...> second_args)
-        {
-            // TODO:
-        }
-        */
-
-        pair& operator=(const pair& other)
-        {
-            first = other.first;
-            second = other.second;
-
-            return *this;
-        }
-
-        template<typename U, typename V>
-        pair& operator=(const pair<U, V>& other)
-        {
-            first = other.first;
-            second = other.second;
-
-            return *this;
-        }
-
-        pair& operator=(pair&& other) noexcept
-        {
-            first = forward<first_type>(other.first);
-            second = forward<second_type>(other.second);
-
-            return *this;
-        }
-    };
-}
+#include <impl/utility.hpp>
