Index: uspace/lib/cpp/include/impl/iterator.hpp
===================================================================
--- uspace/lib/cpp/include/impl/iterator.hpp	(revision c866a83963c9d6c8d137e5814d6b98011c19030f)
+++ uspace/lib/cpp/include/impl/iterator.hpp	(revision 614b07ea3b4859be7f21dc877da8f09217527b55)
@@ -32,6 +32,6 @@
 #include <cstdlib>
 #include <initializer_list>
+#include <internal/memory/addressof.hpp>
 #include <iosfwd>
-#include <memory>
 #include <type_traits>
 #include <utility>
Index: uspace/lib/cpp/include/impl/memory.hpp
===================================================================
--- uspace/lib/cpp/include/impl/memory.hpp	(revision c866a83963c9d6c8d137e5814d6b98011c19030f)
+++ uspace/lib/cpp/include/impl/memory.hpp	(revision 614b07ea3b4859be7f21dc877da8f09217527b55)
@@ -31,4 +31,6 @@
 
 #include <internal/aux.hpp>
+#include <internal/memory/addressof.hpp>
+#include <iterator>
 #include <new>
 #include <type_traits>
@@ -398,5 +400,39 @@
      */
 
-    // TODO: implement
+    template<class OutputIterator, class T>
+    class raw_storage_iterator: public iterator<output_iterator_tag, void, void, void, void>
+    {
+        public:
+            explicit raw_storage_iterator(OutputIterator it)
+                : it_{it}
+            { /* DUMMY BODY */ }
+
+            raw_storage_iterator& operator*()
+            {
+                return *this;
+            }
+
+            raw_storage_iterator& operator=(const T& element)
+            {
+                new(it_) T{element};
+
+                return *this;
+            }
+
+            raw_storage_iterator& operator++()
+            {
+                ++it_;
+
+                return *this;
+            }
+
+            raw_storage_iterator operator++(int)
+            {
+                return raw_storage_iterator{it_++};
+            }
+
+        private:
+            OutputIterator it_;
+    };
 
     /**
@@ -404,18 +440,31 @@
      */
 
-    // TODO: implement
+    template<class T>
+    pair<T*, ptrdiff_t> get_temporary_buffer(ptrdiff_t n) noexcept
+    {
+        T* res{};
+
+        while (n > 0)
+        {
+            res = (T*)malloc(n * sizeof(T));
+
+            if (res)
+                return make_pair(res, n);
+
+            --n;
+        }
+
+        return make_pair(nullptr, ptrdiff_t{});
+    }
+
+    template<class T>
+    void return_temporary_buffer(T* ptr)
+    {
+        free(ptr);
+    }
 
     /**
      * 20.7.12, specialized algorithms:
      */
-
-    template<class T>
-    T* addressof(T& x) noexcept
-    {
-        return reinterpret_cast<T*>(
-            &const_cast<char&>(
-                reinterpret_cast<const volatile char&>(x)
-        ));
-    }
 
     template<class Iterator>
Index: uspace/lib/cpp/include/internal/memory/addressof.hpp
===================================================================
--- uspace/lib/cpp/include/internal/memory/addressof.hpp	(revision 614b07ea3b4859be7f21dc877da8f09217527b55)
+++ uspace/lib/cpp/include/internal/memory/addressof.hpp	(revision 614b07ea3b4859be7f21dc877da8f09217527b55)
@@ -0,0 +1,48 @@
+/*
+ * 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_MEMORY_ADDRESSOF
+#define LIBCPP_INTERNAL_MEMORY_ADDRESSOF
+
+namespace std
+{
+    /**
+     * 20.7.12, specialized algorithms:
+     */
+
+    template<class T>
+    T* addressof(T& x) noexcept
+    {
+        return reinterpret_cast<T*>(
+            &const_cast<char&>(
+                reinterpret_cast<const volatile char&>(x)
+        ));
+    }
+}
+
+#endif
Index: uspace/lib/cpp/include/memory
===================================================================
--- uspace/lib/cpp/include/memory	(revision c866a83963c9d6c8d137e5814d6b98011c19030f)
+++ uspace/lib/cpp/include/memory	(revision 614b07ea3b4859be7f21dc877da8f09217527b55)
@@ -28,2 +28,3 @@
 
 #include <impl/memory.hpp>
+#include <internal/memory/addressof.hpp>
