@@ -649,7 +649,10 @@ public:
649649
650650 _LIBCPP_HIDE_FROM_ABI void __set_parent (pointer __p) { __parent_ = static_cast <__parent_pointer>(__p); }
651651
652- ~__tree_node_base () = delete ;
652+
653+ // template <typename... Args> constexpr __tree_node_base(Args && ... args) =default;
654+ __tree_node_base () = default ;
655+ ~__tree_node_base () = default ;
653656 __tree_node_base (__tree_node_base const &) = delete ;
654657 __tree_node_base& operator =(__tree_node_base const &) = delete ;
655658};
@@ -664,6 +667,10 @@ public:
664667 _LIBCPP_HIDE_FROM_ABI _Tp& __get_value () { return __value_; }
665668 // _LIBCPP_HIDE_FROM_ABI static _Tp& __get_value_static(__tree_node * foo) { return (foo->__value_); }
666669
670+
671+ template <typename ... Args> constexpr __tree_node (Args && ... args): __value_{std::forward<Args>(args)...} { }
672+ // TODO: libcxx26
673+ // _LIBCPP_CONSTEXPR_SINCE_CXX26 __tree_node(__node_value_type && args): __value_{args} { }
667674 ~__tree_node () = delete ;
668675 __tree_node (__tree_node const &) = delete ;
669676 __tree_node& operator =(__tree_node const &) = delete ;
@@ -1814,7 +1821,16 @@ __tree<_Tp, _Compare, _Allocator>::__construct_node(_Args&&... __args) {
18141821 static_assert (!__is_tree_value_type<_Args...>::value, " Cannot construct from __value_type" );
18151822 __node_allocator& __na = __node_alloc ();
18161823 __node_holder __h (__node_traits::allocate (__na, 1 ), _Dp (__na));
1817- __node_traits::construct (__na, _NodeTypes::__get_ptr (__h->__value_ ), std::forward<_Args>(__args)...);
1824+ // std::__value_type<int, double>
1825+ // __h->__value_;
1826+ // std::addresof(__h->__value_);
1827+
1828+ // __node_traits::construct(__na, std::addressof(__h->__value_), std::forward<_Args>(__args)...);
1829+ // *h is allocated as of yet, but not constructed
1830+ // TODO: -> remove (AFAIK, given only cc in the following needs space: h, h->value and h->value->cc)
1831+ __node_traits::construct (__na, std::addressof (*__h), std::forward<_Args>(__args)...);
1832+
1833+ // __node_traits::construct(__na, _NodeTypes::__get_ptr(__h->__value_), std::forward<_Args>(__args)...);
18181834 __h.get_deleter ().__value_constructed = true ;
18191835 return __h;
18201836}
0 commit comments