Index: uspace/lib/cpp/include/impl/map.hpp
===================================================================
--- uspace/lib/cpp/include/impl/map.hpp	(revision 255bb635746671c82fb51ef5e7cac7faf02fea9f)
+++ uspace/lib/cpp/include/impl/map.hpp	(revision 21d97e85380f9ea131a025873e8863f6b9d26060)
@@ -63,9 +63,11 @@
             using difference_type = ptrdiff_t;
 
+            using node_type = aux::rbtree_single_node<value_type>;
+
             using iterator             = aux::rbtree_iterator<
-                value_type, reference, pointer, size_type
+                value_type, reference, pointer, size_type, node_type
             >;
             using const_iterator       = aux::rbtree_const_iterator<
-                value_type, const_reference, const_pointer, size_type
+                value_type, const_reference, const_pointer, size_type, node_type
             >;
 
@@ -338,5 +340,7 @@
             template<class T>
             pair<iterator, bool> insert(
-                enable_if_t<is_constructible_v<value_type, T&&>, T&&> val)
+                T&& val,
+                enable_if_t<is_constructible_v<value_type, T&&>>* = nullptr
+            )
             {
                 return emplace(forward<T>(val));
@@ -356,5 +360,6 @@
             iterator insert(
                 const_iterator hint,
-                enable_if_t<is_constructible_v<value_type, T&&>, T&&> val
+                T&& val,
+                enable_if_t<is_constructible_v<value_type, T&&>>* = nullptr
             )
             {
@@ -422,5 +427,5 @@
                 if (parent && tree_.keys_equal(tree_.get_key(parent->value), key))
                 {
-                    parent->value = value_type{key, forward<T>(val)};
+                    parent->value.second = forward<T>(val);
 
                     return make_pair(iterator{parent, false}, false);
@@ -441,5 +446,5 @@
                 if (parent && tree_.keys_equal(tree_.get_key(parent->value), key))
                 {
-                    parent->value = value_type{move(key), forward<T>(val)};
+                    parent->value.second = forward<T>(val);
 
                     return make_pair(iterator{parent, false}, false);
@@ -521,5 +526,6 @@
             template<class K>
             iterator find(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             )
             {
@@ -529,5 +535,6 @@
             template<class K>
             const_iterator find(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             ) const
             {
@@ -542,5 +549,6 @@
             template<class K>
             size_type count(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             ) const
             {
@@ -560,5 +568,6 @@
             template<class K>
             iterator lower_bound(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             )
             {
@@ -568,5 +577,6 @@
             template<class K>
             const_iterator lower_bound(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             ) const
             {
@@ -586,5 +596,6 @@
             template<class K>
             iterator upper_bound(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             )
             {
@@ -594,5 +605,6 @@
             template<class K>
             const_iterator upper_bound(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             ) const
             {
@@ -612,5 +624,6 @@
             template<class K>
             pair<iterator, iterator> equal_range(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             )
             {
@@ -620,5 +633,6 @@
             template<class K>
             pair<const_iterator, const_iterator> equal_range(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             ) const
             {
@@ -631,8 +645,6 @@
                 key_compare, allocator_type, size_type,
                 iterator, const_iterator,
-                aux::rbtree_single_policy
+                aux::rbtree_single_policy, node_type
             >;
-
-            using node_type = typename tree_type::node_type;
 
             tree_type tree_;
@@ -714,4 +726,6 @@
             using difference_type = ptrdiff_t;
 
+            using node_type = aux::rbtree_multi_node<value_type>;
+
             class value_compare
             {
@@ -737,8 +751,8 @@
 
             using iterator             = aux::rbtree_iterator<
-                value_type, reference, pointer, size_type
+                value_type, reference, pointer, size_type, node_type
             >;
             using const_iterator       = aux::rbtree_const_iterator<
-                value_type, const_reference, const_pointer, size_type
+                value_type, const_reference, const_pointer, size_type, node_type
             >;
 
@@ -937,5 +951,6 @@
             template<class T>
             iterator insert(
-                enable_if_t<is_constructible_v<value_type, T&&>, T&&> val
+                T&& val,
+                enable_if_t<is_constructible_v<value_type, T&&>>* = nullptr
             )
             {
@@ -956,5 +971,6 @@
             iterator insert(
                 const_iterator hint,
-                enable_if_t<is_constructible_v<value_type, T&&>, T&&> val
+                T&& val,
+                enable_if_t<is_constructible_v<value_type, T&&>>* = nullptr
             )
             {
@@ -1029,5 +1045,6 @@
             template<class K>
             iterator find(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             )
             {
@@ -1037,5 +1054,6 @@
             template<class K>
             const_iterator find(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             ) const
             {
@@ -1050,5 +1068,6 @@
             template<class K>
             size_type count(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             ) const
             {
@@ -1068,5 +1087,6 @@
             template<class K>
             iterator lower_bound(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             )
             {
@@ -1076,5 +1096,6 @@
             template<class K>
             const_iterator lower_bound(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             ) const
             {
@@ -1094,5 +1115,6 @@
             template<class K>
             iterator upper_bound(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             )
             {
@@ -1102,5 +1124,6 @@
             template<class K>
             const_iterator upper_bound(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             ) const
             {
@@ -1120,5 +1143,6 @@
             template<class K>
             pair<iterator, iterator> equal_range(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             )
             {
@@ -1128,5 +1152,6 @@
             template<class K>
             pair<const_iterator, const_iterator> equal_range(
-                enable_if_t<aux::is_transparent_v<key_compare>, const K&> key
+                const K& key,
+                enable_if_t<aux::is_transparent_v<key_compare>, K>* = nullptr
             ) const
             {
@@ -1139,5 +1164,5 @@
                 key_compare, allocator_type, size_type,
                 iterator, const_iterator,
-                aux::rbtree_multi_policy
+                aux::rbtree_multi_policy, node_type
             >;
 
