Index: uspace/lib/cpp/Makefile
===================================================================
--- uspace/lib/cpp/Makefile	(revision 4dfac1e8d21ffd707212d76871080a4065054613)
+++ uspace/lib/cpp/Makefile	(revision 4727aacd63aa9f0572728927ba262a1d62871c6b)
@@ -40,4 +40,5 @@
 	src/condition_variable.cpp \
 	src/exception.cpp \
+	src/future.cpp \
 	src/iomanip.cpp \
 	src/ios.cpp \
Index: uspace/lib/cpp/include/impl/future.hpp
===================================================================
--- uspace/lib/cpp/include/impl/future.hpp	(revision 4dfac1e8d21ffd707212d76871080a4065054613)
+++ uspace/lib/cpp/include/impl/future.hpp	(revision 4727aacd63aa9f0572728927ba262a1d62871c6b)
@@ -30,5 +30,154 @@
 #define LIBCPP_FUTURE
 
-#error "<future> is not implemented"
+#include <memory>
+#include <system_error>
+#include <type_traits>
+
+namespace std
+{
+    /**
+     * 30.6, futures:
+     */
+
+    enum class future_errc
+    { // The 5001 start is to not collide with system_error's codes.
+        broken_promise = 5001,
+        future_already_retrieved,
+        promise_already_satisfied,
+        no_state
+    };
+
+    enum class launch
+    {
+        async,
+        deferred
+    };
+
+    enum class future_status
+    {
+        ready,
+        timeout,
+        deferred
+    };
+
+    /**
+     * 30.6.2, error handling:
+     */
+
+    template<>
+    struct is_error_code_enum<future_errc>: true_type
+    { /* DUMMY BODY */ };
+
+    error_code make_error_code(future_errc) noexcept;
+    error_condition make_error_condition(future_errc) noexcept;
+
+    const error_category& future_category() noexcept;
+
+    /**
+     * 30.6.3, class future_error:
+     */
+
+    class future_error: public logic_error
+    {
+        public:
+            future_error(error_code ec);
+
+            const error_code& code() const noexcept;
+
+        private:
+            error_code code_;
+    };
+
+    /**
+     * 30.6.4, shared state:
+     */
+
+    template<class R>
+    class promise
+    {
+    };
+
+    template<class R>
+    class promise<R&>
+    {
+    };
+
+    template<>
+    class promise<void>
+    {
+    };
+
+    template<class R>
+    void swap(promise<R>& lhs, promise<R>& rhs) noexcept
+    {
+        lhs.swap(rhs);
+    }
+
+    template<class R, class Alloc>
+    struct uses_allocator<promise<R>, Alloc>: true_type
+    { /* DUMMY BODY */ };
+
+    template<class R>
+    class future
+    {
+    };
+
+    template<class R>
+    class future<R&>
+    {
+    };
+
+    template<>
+    class future<void>
+    {
+    };
+
+    template<class R>
+    class shared_future
+    {
+    };
+
+    template<class R>
+    class shared_future<R&>
+    {
+    };
+
+    template<>
+    class shared_future<void>
+    {
+    };
+
+    template<class>
+    class packaged_task; // undefined
+
+    template<class R, class... Args>
+    class packaged_task<R(Args...)>
+    {
+    };
+
+    template<class R, class... Args>
+    void swap(packaged_task<R(Args...)>& lhs, packaged_task<R(Args...)>& rhs) noexcept
+    {
+        lhs.swap(rhs);
+    };
+
+    template<class R, class Alloc>
+    struct uses_allocator<packaged_task<R>, Alloc>: true_type
+    { /* DUMMY BODY */ };
+
+    template<class F, class... Args>
+    future<result_of_t<decay_t<F>(decay_t<Args>...)>>
+    async(F&& f, Args&&... args)
+    {
+        // TODO: implement
+    }
+
+    template<class F, class... Args>
+    future<result_of_t<decay_t<F>(decay_t<Args>...)>>
+    async(launch, F&& f, Args&&... args)
+    {
+        // TODO: implement
+    }
+}
 
 #endif
Index: uspace/lib/cpp/src/future.cpp
===================================================================
--- uspace/lib/cpp/src/future.cpp	(revision 4727aacd63aa9f0572728927ba262a1d62871c6b)
+++ uspace/lib/cpp/src/future.cpp	(revision 4727aacd63aa9f0572728927ba262a1d62871c6b)
@@ -0,0 +1,83 @@
+/*
+ * 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.
+ */
+
+#include <future>
+#include <string>
+#include <system_error>
+
+namespace std
+{
+    error_code make_error_code(future_errc ec) noexcept
+    {
+        return error_code{static_cast<int>(ec), future_category()};
+    }
+
+    error_condition make_error_condition(future_errc ec) noexcept
+    {
+        return error_condition{static_cast<int>(ec), future_category()};
+    }
+
+    namespace aux
+    {
+        class future_category_t: public error_category
+        {
+            public:
+                future_category_t()
+                    : error_category{}
+                { /* DUMMY BODY */ }
+
+                ~future_category_t() = default;
+
+                const char* name() const noexcept override
+                {
+                    return "future";
+                }
+
+                string message(int ev) const override
+                {
+                    return "ev: " + std::to_string(ev);
+                }
+        };
+    }
+
+    const error_category& future_category() noexcept
+    {
+        static aux::future_category_t instance{};
+
+        return instance;
+    }
+
+    future_error::future_error(error_code ec)
+        : logic_error{"future_error"}, code_{ec}
+    { /* DUMMY BODY */ }
+
+    const error_code& future_error::code() const noexcept
+    {
+        return code_;
+    }
+}
