Index: uspace/lib/cpp/include/impl/functional.hpp
===================================================================
--- uspace/lib/cpp/include/impl/functional.hpp	(revision a30c04d88f2717dfd47befd11f3ee4c9085e8acf)
+++ uspace/lib/cpp/include/impl/functional.hpp	(revision 800968b713f2fd96c6cf3e974b7da5ad8f6ae6bf)
@@ -1144,4 +1144,7 @@
         };
 
+        template<class F, class... Args>
+        class bind_t;
+
         template<class... Args>
         class bind_arg_filter
@@ -1152,5 +1155,4 @@
                 { /* DUMMY BODY */ }
 
-                // TODO: enable if T != ref_wrapper
                 template<class T>
                 constexpr decltype(auto) operator[](T&& t)
@@ -1161,14 +1163,24 @@
                 template<int N>
                 constexpr decltype(auto) operator[](const placeholder_t<N>)
-                {
+                { // Since placeholders are constexpr, this is the best match for them.
                     /**
                      * Come on, it's int! Why not use -1 as not placeholder
                      * and start them at 0? -.-
                      */
-                    /* return get<is_placeholder_v<decay_t<T>> - 1>(args_); */
                     return get<N - 1>(args_);
                 }
 
-                // TODO: overload the operator for reference_wrapper
+                template<class T>
+                constexpr T& operator[](reference_wrapper<T> ref)
+                {
+                    return ref.get();
+                }
+
+                template<class F, class... BindArgs>
+                constexpr decltype(auto) operator[](const bind_t<F, BindArgs...> b)
+                {
+                    return b; // TODO: bind subexpressions
+                }
+
 
             private:
@@ -1181,4 +1193,5 @@
             // TODO: conditional typedefs
             public:
+                // TODO: T& gets captured by ref, should be by value :/
                 template<class... BoundArgs>
                 constexpr bind_t(F&& f, BoundArgs&&... args)
@@ -1186,4 +1199,7 @@
                       bound_args_{forward<BoundArgs>(args)...}
                 { /* DUMMY BODY */ }
+
+                constexpr bind_t(const bind_t& other) = default;
+                constexpr bind_t(bind_t&& other) = default;
 
                 template<class... ActualArgs>
