Skip to content

Commit 54107af

Browse files
WIP???
1 parent 7c72e0e commit 54107af

File tree

1 file changed

+75
-28
lines changed

1 file changed

+75
-28
lines changed

libcxx/include/__tree

Lines changed: 75 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1867,40 +1867,78 @@ pair<typename __tree<_Tp, _Compare, _Allocator>::iterator, bool>
18671867
bool __inserted = false;
18681868
if (__child == nullptr) {
18691869
__node_holder __h = __construct_node(std::forward<_Args>(__args)...);
1870-
// std::unique_ptr<std::__tree_node<std::__value_type<int, double>, min_pointer<void>>,
1871-
// std::__tree_node_destructor<min_allocator<std::__tree_node<std::__value_type<int, double>, min_pointer<void>>>>>
18721870

1873-
// *h
1874-
// std::__tree_node<std::__value_type<int, double>, min_pointer<void>>
1875-
// (*__h).fooooo;
1876-
// std::__tree_node<std::__value_type<int, double>, min_pointer<void>>
1871+
/*
1872+
error: cannot convert
1873+
'__node_holder'
1874+
(aka
1875+
' unique_ptr<
1876+
__tree_node<
1877+
std::__value_type<int, double>,
1878+
min_pointer<void, std::integral_constant<unsigned long, 0> >
1879+
>,
1880+
__tree_node_destructor<
1881+
min_allocator<
1882+
std::__tree_node<
1883+
std::__value_type<int, double>,
1884+
min_pointer<void, std::integral_constant<unsigned long, 0> >
1885+
>
1886+
>
1887+
>
1888+
>
1889+
'
1890+
)
1891+
to 'double' without a conversion operator
1892+
*/
1893+
// double d2 =static_cast<double>(__h);
1894+
// (void)d2;
18771895

1878-
// __h.get().foooooo;
1879-
// min_pointer<std::__tree_node<std::__value_type<int, double>, min_pointer<void>>>
1896+
/*
1897+
error: cannot convert 'pointer'
1898+
(aka
1899+
' min_pointer<
1900+
std::__tree_node<
1901+
std::__value_type<int, double>,
1902+
min_pointer<void, std::integral_constant<unsigned long, 0>>
1903+
>
1904+
>
1905+
') to 'double' without a conversion operator
1906+
*/
1907+
// double d =static_cast<double>(__h.get());
1908+
// (void)d;
18801909

1881-
// __node_base_pointer = min_pointer<std::__tree_node_base< min_pointer<void>>>
1882-
// __h.get() = min_pointer<std::__tree_node <std::__value_type<int, double>, min_pointer<void>>>
1910+
/*
1911+
error: cannot convert '__node_base_pointer' (aka
1912+
' min_pointer<
1913+
std::__tree_node_base<
1914+
min_pointer<void, std::integral_constant<unsigned long, 0>>
1915+
>,
1916+
std::integral_constant<unsigned long, 0>
1917+
>
1918+
') to 'double' without a conversion operator
1919+
*/
18831920

1884-
// static_assert();
1921+
// __node_base_pointer xxx = nullptr;
1922+
// (void)xxx;
1923+
// double d3 =static_cast<double>(xxx);
1924+
// (void)d3;
18851925

1886-
// __tree_node::__node_value_type = std::__value_type<int, double>
1926+
// __node_base_pointer __foo = static_cast<__node_base_pointer>(__h.get());
1927+
// (void)__foo;
1928+
// __maybe_unused__ __node_base_pointer __foo2 = __node_base_pointer(__h.get());
18871929

1888-
/*
1889-
without 233
1890-
no matching conversion for static_cast
1891-
from 'pointer' (aka
1892-
'min_pointer<std::__tree_node<std::__value_type<int, double>, min_pointer<void, std::integral_constant<unsigned
1893-
long, 0>>>>'
1894-
)
1895-
to '__node_base_pointer' (aka
1896-
'min_pointer<std::__tree_node_base<min_pointer<void, std::integral_constant<unsigned long, 0>>>,
1897-
std::integral_constant<unsigned long, 0>>'
1898-
)
1899-
*/
1930+
/*
1931+
error: cannot convert '__tree<std::__value_type<int, double>, std::__map_value_compare<int, std::pair<const int, double>, std::less<int>, true>, min_allocator<std::pair<const int, double>>>::__node_holder' (aka 'unique_ptr<__tree_node<std::__value_type<int, double>, min_pointer<void, std::integral_constant<unsigned long, 0>>>, __tree_node_destructor<min_allocator<std::__tree_node<std::__value_type<int, double>, min_pointer<void, std::integral_constant<unsigned long, 0>>>>>>') to 'double' without a conversion operator
1932+
*/
1933+
// __tree<_Tp, _Compare, _Allocator>::__node_holder __tmp_nh;
1934+
// double __xxx = static_cast<double>(__tmp_nh);
19001935

1901-
__node_base_pointer __foo = static_cast<__node_base_pointer>(__h.get());
1902-
(void)__foo;
1903-
// __maybe_unused__ __node_base_pointer __foo2 = __node_base_pointer(__h.get());
1936+
1937+
/*
1938+
error: cannot convert 'pointer' (aka 'min_pointer<std::__tree_node<std::__value_type<int, double>, min_pointer<void, std::integral_constant<unsigned long, 0>>>>') to 'double' without a conversion operator
1939+
*/
1940+
// __tree<_Tp, _Compare, _Allocator>::__node_holder __tmp_nh;
1941+
// double __xxx = static_cast<double>(__tmp_nh.get());
19041942

19051943
/*
19061944
note:
@@ -1911,9 +1949,18 @@ pair<typename __tree<_Tp, _Compare, _Allocator>::iterator, bool>
19111949
'std::__tree_node_base<min_pointer<void>>'
19121950
*/
19131951

1914-
// i believe this cast fails because the lifetime of __h.get() has not begun
1952+
if(__libcpp_is_constant_evaluated()){
19151953

1954+
typename __tree<_Tp, _Compare, _Allocator>::__node_holder::pointer cast = static_cast<
1955+
__tree<_Tp, _Compare, _Allocator>::__node_holder::pointer>(__h.get());
1956+
__node_base_pointer base = static_cast<__node_base_pointer>(cast);
1957+
1958+
1959+
__insert_node_at(__parent, __child, base);
1960+
}else {
19161961
__insert_node_at(__parent, __child, static_cast<__node_base_pointer>(__h.get()));
1962+
}
1963+
19171964
__r = __h.release();
19181965
__inserted = true;
19191966
}

0 commit comments

Comments
 (0)