Index: uspace/lib/cpp/include/impl/memory.hpp
===================================================================
--- uspace/lib/cpp/include/impl/memory.hpp	(revision 4c5866804e092a7a326e62e6165c26e6e207e211)
+++ uspace/lib/cpp/include/impl/memory.hpp	(revision 973a268b31c3de6009dbd02163597cc001450d43)
@@ -268,4 +268,7 @@
 
     template<class T>
+    T* addressof(T& x) noexcept;
+
+    template<class T>
     class allocator
     {
@@ -301,11 +304,11 @@
 
             pointer address(reference x) const noexcept
-            { // TODO: see std::addressof
-                return &x;
+            {
+                return addressof(x);
             }
 
             const_pointer address(const_reference x) const noexcept
-            { // TODO: see std::addressof
-                return &x;
+            {
+                return addressof(x);
             }
 
@@ -373,7 +376,13 @@
     template<class T>
     T* addressof(T& x) noexcept
-    { // TODO: This should actually work even with overloaded operator&.
-        return &x;
-    }
+    {
+        return reinterpret_cast<T*>(
+            &const_cast<char&>(
+                reinterpret_cast<const volatile char&>(x)
+        ));
+    }
+
+    template<class Iterator>
+    struct iterator_traits;
 
     template<class InputIterator, class ForwardIterator>
