Index: uspace/lib/cpp/include/impl/tuple.hpp
===================================================================
--- uspace/lib/cpp/include/impl/tuple.hpp	(revision ac68088f30575742a5308534e0748cce205b5202)
+++ uspace/lib/cpp/include/impl/tuple.hpp	(revision 7a66678916923f4cfb6437cb2d864d75526b735f)
@@ -33,4 +33,5 @@
 #include <internal/tuple_cat.hpp>
 #include <internal/tuple_ops.hpp>
+#include <internal/type_transformation.hpp>
 #include <functional>
 #include <type_traits>
@@ -59,21 +60,4 @@
 
     inline constexpr aux::ignore_t ignore;
-
-    namespace aux
-    {
-        template<class T>
-        struct remove_reference_wrapper: type_is<T>
-        { /* DUMMY BODY */ };
-
-        template<class T>
-        struct remove_reference_wrapper<reference_wrapper<T>>: type_is<T&>
-        { /* DUMMY BODY */ };
-
-        template<class T>
-        using remove_reference_wrapper_t = typename remove_reference_wrapper<T>::type;
-
-        template<class T>
-        using transform_tuple_types_t = remove_reference_wrapper_t<decay_t<T>>;
-    }
 
     template<class... Ts> // TODO: test the reference_wrapper version once we got reference_wrapper
Index: uspace/lib/cpp/include/impl/utility.hpp
===================================================================
--- uspace/lib/cpp/include/impl/utility.hpp	(revision ac68088f30575742a5308534e0748cce205b5202)
+++ uspace/lib/cpp/include/impl/utility.hpp	(revision 7a66678916923f4cfb6437cb2d864d75526b735f)
@@ -31,4 +31,5 @@
 
 #include <cstdint>
+#include <internal/type_transformation.hpp>
 #include <type_traits>
 
@@ -208,4 +209,27 @@
         }
     };
+
+    /**
+     * 20.3.3, specialized algorithms:
+     */
+
+    // TODO: implement
+
+    template<class T1, class T2>
+    constexpr auto make_pair(T1&& t1, T2&& t2)
+    {
+        return pair<
+            aux::transform_tuple_types_t<T1>,
+            aux::transform_tuple_types_t<T2>
+        >{
+            forward<T1>(t1), forward<T2>(t2)
+        };
+    }
+
+    /**
+     * 20.3.4, tuple-like access to pair:
+     */
+
+    // TODO: implement
 
     /**
Index: uspace/lib/cpp/include/internal/type_transformation.hpp
===================================================================
--- uspace/lib/cpp/include/internal/type_transformation.hpp	(revision 7a66678916923f4cfb6437cb2d864d75526b735f)
+++ uspace/lib/cpp/include/internal/type_transformation.hpp	(revision 7a66678916923f4cfb6437cb2d864d75526b735f)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2018 Jaroslav Jindrak
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LIBCPP_INTERNAL_TYPE_TRANSFORMATION
+#define LIBCPP_INTERNAL_TYPE_TRANSFORMATION
+
+#include <internal/aux.hpp>
+#include <type_traits>
+
+namespace std
+{
+    template<class>
+    class reference_wrapper;
+}
+
+namespace std::aux
+{
+    template<class T>
+    struct remove_reference_wrapper: type_is<T>
+    { /* DUMMY BODY */ };
+
+    template<class T>
+    struct remove_reference_wrapper<reference_wrapper<T>>: type_is<T&>
+    { /* DUMMY BODY */ };
+
+    template<class T>
+    using remove_reference_wrapper_t = typename remove_reference_wrapper<T>::type;
+
+    template<class T>
+    using transform_tuple_types_t = remove_reference_wrapper_t<decay_t<T>>;
+}
+
+#endif
