Index: uspace/lib/cpp/include/impl/type_traits.hpp
===================================================================
--- uspace/lib/cpp/include/impl/type_traits.hpp	(revision bfc972ed291255d220c32e502dd15b876c99e8d6)
+++ uspace/lib/cpp/include/impl/type_traits.hpp	(revision ca8d393e2062e0e68b61690c497cc19ff4f581cf)
@@ -47,30 +47,4 @@
     add_rvalue_reference_t<T> declval() noexcept;
 
-    /**
-     * 20.10.3, helper class:
-     */
-
-    template<class T, T v>
-    struct integral_constant
-    {
-        static constexpr T value = v;
-
-        using value_type = T;
-        using type       = integral_constant<T, v>;
-
-        constexpr operator value_type() const noexcept
-        {
-            return value;
-        }
-
-        constexpr value_type operator()() const noexcept
-        {
-            return value;
-        }
-    };
-
-    using true_type = integral_constant<bool, true>;
-    using false_type = integral_constant<bool, false>;
-
     template<class...>
     using void_t = void;
@@ -959,11 +933,58 @@
     /**
      * 20.10.7.3, sign modifications:
+     * Note: These are fairly naive implementations that
+     *       are meant to keep our code going (i.e. they work
+     *       for the most common types, but I'm not sure
+     *       if there are any intricacies required by
+     *       the standard).
      */
 
     template<class T>
-    struct make_signed;
-
-    template<class T>
-    struct make_unsigned;
+    struct make_signed: aux::type_is<T>
+    { /* DUMMY BODY */ };
+
+    template<>
+    struct make_signed<unsigned char>: aux::type_is<signed char>
+    { /* DUMMY BODY */ };
+
+    template<>
+    struct make_signed<unsigned short>: aux::type_is<short>
+    { /* DUMMY BODY */ };
+
+    template<>
+    struct make_signed<unsigned int>: aux::type_is<int>
+    { /* DUMMY BODY */ };
+
+    template<>
+    struct make_signed<unsigned long>: aux::type_is<long>
+    { /* DUMMY BODY */ };
+
+    template<>
+    struct make_signed<unsigned long long>: aux::type_is<long long>
+    { /* DUMMY BODY */ };
+
+    template<class T>
+    struct make_unsigned: aux::type_is<T>
+    { /* DUMMY BODY */ };
+
+    template<>
+    struct make_unsigned<signed char>: aux::type_is<unsigned char>
+    { /* DUMMY BODY */ };
+
+    template<>
+    struct make_unsigned<short>: aux::type_is<unsigned short>
+    { /* DUMMY BODY */ };
+
+    template<>
+    struct make_unsigned<int>: aux::type_is<unsigned int>
+    { /* DUMMY BODY */ };
+
+    template<>
+    struct make_unsigned<long>: aux::type_is<unsigned long>
+    { /* DUMMY BODY */ };
+
+    template<>
+    struct make_unsigned<long long>: aux::type_is<unsigned long long>
+    { /* DUMMY BODY */ };
 
     template<class T>
Index: uspace/lib/cpp/include/internal/aux.hpp
===================================================================
--- uspace/lib/cpp/include/internal/aux.hpp	(revision bfc972ed291255d220c32e502dd15b876c99e8d6)
+++ uspace/lib/cpp/include/internal/aux.hpp	(revision ca8d393e2062e0e68b61690c497cc19ff4f581cf)
@@ -30,4 +30,33 @@
 #define LIBCPP_AUX
 
+namespace std
+{
+    /**
+     * 20.10.3, helper class:
+     */
+
+    template<class T, T v>
+    struct integral_constant
+    {
+        static constexpr T value = v;
+
+        using value_type = T;
+        using type       = integral_constant<T, v>;
+
+        constexpr operator value_type() const noexcept
+        {
+            return value;
+        }
+
+        constexpr value_type operator()() const noexcept
+        {
+            return value;
+        }
+    };
+
+    using true_type = integral_constant<bool, true>;
+    using false_type = integral_constant<bool, false>;
+}
+
 namespace std::aux
 {
@@ -55,9 +84,7 @@
     };
 
+    // For compatibility with integral_constant.
     template<class T, T v>
-    struct value_is
-    {
-        static constexpr T value = v;
-    };
+    using value_is = std::integral_constant<T, v>;
 }
 
