@@ -1800,12 +1800,65 @@ pair<typename __tree<_Tp, _Compare, _Allocator>::iterator, bool>
1800
1800
_LIBCPP_CONSTEXPR_SINCE_CXX26 __tree<_Tp, _Compare, _Allocator>::__emplace_hint_unique_key_args(
1801
1801
const_iterator __p, _Key const & __k, _Args&&... __args) {
1802
1802
__parent_pointer __parent;
1803
+ // std::__tree_end_node<std::__tree_node_base<void *> *>
1803
1804
__node_base_pointer __dummy;
1805
+ // min_pointer<std::__tree_node_base<min_pointer<void>>>
1806
+
1804
1807
__node_base_pointer& __child = __find_equal (__p, __parent, __dummy, __k);
1805
1808
__node_pointer __r = static_cast <__node_pointer>(__child);
1806
1809
bool __inserted = false ;
1807
1810
if (__child == nullptr ) {
1808
1811
__node_holder __h = __construct_node (std::forward<_Args>(__args)...);
1812
+ // std::unique_ptr<std::__tree_node<std::__value_type<int, double>, min_pointer<void>>, std::__tree_node_destructor<min_allocator<std::__tree_node<std::__value_type<int, double>, min_pointer<void>>>>>
1813
+
1814
+ // *h
1815
+ // std::__tree_node<std::__value_type<int, double>, min_pointer<void>>
1816
+ // (*__h).fooooo;
1817
+ // std::__tree_node<std::__value_type<int, double>, min_pointer<void>>
1818
+
1819
+ // __h.get().foooooo;
1820
+ // min_pointer<std::__tree_node<std::__value_type<int, double>, min_pointer<void>>>
1821
+
1822
+ // __node_base_pointer = min_pointer<std::__tree_node_base< min_pointer<void>>>
1823
+ // __h.get() = min_pointer<std::__tree_node <std::__value_type<int, double>, min_pointer<void>>>
1824
+
1825
+
1826
+ // static_assert();
1827
+
1828
+ // __tree_node::__node_value_type = std::__value_type<int, double>
1829
+
1830
+ /*
1831
+ without 233
1832
+ no matching conversion for static_cast
1833
+ from 'pointer' (aka
1834
+ 'min_pointer<std::__tree_node<std::__value_type<int, double>, min_pointer<void, std::integral_constant<unsigned long, 0>>>>'
1835
+ )
1836
+ to '__node_base_pointer' (aka
1837
+ 'min_pointer<std::__tree_node_base<min_pointer<void, std::integral_constant<unsigned long, 0>>>, std::integral_constant<unsigned long, 0>>'
1838
+ )
1839
+ */
1840
+
1841
+
1842
+
1843
+
1844
+ [[maybe_unused]] __node_base_pointer foo = static_cast <__node_base_pointer>(__h.get ());
1845
+ // [[maybe_unused]] __node_base_pointer foo2 = __node_base_pointer(__h.get());
1846
+
1847
+
1848
+
1849
+
1850
+ /*
1851
+ note:
1852
+ cast from 'void *' is not allowed in a constant expression
1853
+ because the pointed object type
1854
+ 'std::__tree_node<std::__value_type<int, double>, min_pointer<void>>'
1855
+ is not similar to the target type
1856
+ 'std::__tree_node_base<min_pointer<void>>'
1857
+ */
1858
+
1859
+ // i believe this cast fails because the lifetime of __h.get() has not begun
1860
+
1861
+
1809
1862
__insert_node_at (__parent, __child, static_cast <__node_base_pointer>(__h.get ()));
1810
1863
__r = __h.release ();
1811
1864
__inserted = true ;
0 commit comments