Index: uspace/lib/cpp/include/__bits/thread/future.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/thread/future.hpp	(revision 3a296071aa8c3908e5d0082398c74a4b64d73391)
+++ uspace/lib/cpp/include/__bits/thread/future.hpp	(revision bd6ad4b2bf686879b0f9cd2a7a3b838d9a4b1a0f)
@@ -54,5 +54,5 @@
 
                 future_base(future_base&& rhs) noexcept
-                    : state_{std::move(rhs.state_)}
+                    : state_{move(rhs.state_)}
                 {
                     rhs.state_ = nullptr;
@@ -80,5 +80,5 @@
                 {
                     release_state_();
-                    state_ = std::move(rhs.state_);
+                    state_ = move(rhs.state_);
                     rhs.state_ = nullptr;
                 }
@@ -162,5 +162,5 @@
 
             future(future&& rhs) noexcept
-                : aux::future_base<R>{std::move(rhs.state_)}
+                : aux::future_base<R>{move(rhs.state_)}
             { /* DUMMY BODY */ }
 
@@ -173,10 +173,10 @@
             future& operator=(future&& rhs) noexcept
             {
-                return aux::future_base<R>::operator=(std::move(rhs));
+                return aux::future_base<R>::operator=(move(rhs));
             }
 
             shared_future<R> share()
             {
-                return shared_future<R>(std::move(*this));
+                return shared_future<R>(move(*this));
             }
 
@@ -190,18 +190,87 @@
                     this->state_->throw_stored_exception();
 
+                return move(this->state_->get());
+            }
+    };
+
+    template<class R>
+    class future<R&>: public aux::future_base<R&>
+    {
+        public:
+            future() noexcept
+                : aux::future_base<R&>{}
+            { /* DUMMY BODY */ }
+
+            future(const future&) = delete;
+
+            future(future&& rhs) noexcept
+                : aux::future_base<R&>{move(rhs.state_)}
+            { /* DUMMY BODY */ }
+
+            future(aux::shared_state<R&>* state)
+                : aux::future_base<R&>{state}
+            { /* DUMMY BODY */ }
+
+            future& operator=(const future&) = delete;
+
+            future& operator=(future&& rhs) noexcept
+            {
+                return aux::future_base<R>::operator=(move(rhs));
+            }
+
+            shared_future<R&> share()
+            {
+                return shared_future<R&>(move(*this));
+            }
+
+            R& get()
+            {
+                assert(this->state_);
+
+                this->wait();
+
+                if (this->state_->has_exception())
+                    this->state_->throw_stored_exception();
+
                 return this->state_->get();
             }
     };
 
-    template<class R>
-    class future<R&>
-    {
-        // TODO: Copy & modify once future is done.
-    };
-
     template<>
-    class future<void>
-    {
-        // TODO: Copy & modify once future is done.
+    class future<void>: public aux::future_base<void>
+    {
+        public:
+            future() noexcept
+                : aux::future_base<void>{}
+            { /* DUMMY BODY */ }
+
+            future(const future&) = delete;
+
+            future(future&& rhs) noexcept
+                : aux::future_base<void>{move(rhs.state_)}
+            { /* DUMMY BODY */ }
+
+            future(aux::shared_state<void>* state)
+                : aux::future_base<void>{state}
+            { /* DUMMY BODY */ }
+
+            future& operator=(const future&) = delete;
+
+            future& operator=(future&& rhs) noexcept = default;
+
+            /* shared_future<void> share() */
+            /* { */
+            /*     return shared_future<void>(move(*this)); */
+            /* } */
+
+            void get()
+            {
+                assert(this->state_);
+
+                this->wait();
+
+                if (this->state_->has_exception())
+                    this->state_->throw_stored_exception();
+            }
     };
 }
