Index: uspace/lib/cpp/include/impl/memory.hpp
===================================================================
--- uspace/lib/cpp/include/impl/memory.hpp	(revision 55540fca98e0dee5ef115f2235fa2ff58bc65f27)
+++ uspace/lib/cpp/include/impl/memory.hpp	(revision ca32d457f44ffccce56962edb30aa522d6a05d09)
@@ -62,4 +62,29 @@
 
     /**
+     * 20.7.7, uses_allocator:
+     */
+
+    namespace aux
+    {
+        template<class T, class = void>
+        struct has_allocator_type: false_type
+        { /* DUMMY BODY */ };
+
+        template<class T>
+        struct has_allocator_type<T, void_t<typename T::allocator_type>>
+            : true_type
+        { /* DUMMY BODY */ };
+    }
+
+    template<class T, class Alloc, class = void>
+    struct uses_allocator
+        : aux::value_is<
+        bool, aux::has_allocator_type<T>::value && is_convertible_v<
+            Alloc, typename T::allocator_type
+        >
+    >
+    { /* DUMMY BODY */ };
+
+    /**
      * 20.7.8, allocator traits:
      */
Index: uspace/lib/cpp/include/impl/tuple.hpp
===================================================================
--- uspace/lib/cpp/include/impl/tuple.hpp	(revision 55540fca98e0dee5ef115f2235fa2ff58bc65f27)
+++ uspace/lib/cpp/include/impl/tuple.hpp	(revision ca32d457f44ffccce56962edb30aa522d6a05d09)
@@ -463,7 +463,4 @@
      */
 
-    template<class...>
-    struct uses_allocator;
-
     template<class... Ts, class Alloc>
     struct uses_allocator<tuple<Ts...>, Alloc>: true_type
