So I tried next_, but I got garbage again, but this time it is not 0xcdcdcdcd but something a bit different. I have inserted a "1" into the container, so I'd expect that the buffer contained [0x01 0x00 0x00 0x00].
See screenshot - the expression shown is (sorry :-)))
I'm not 100% sure, but I think you're not getting the casts right --if I'm interpreting the expression correctly, you are applying the following casts to the next_ pointer:
a) to boost::multi_index::detail::sequenced_index_node_trampoline< boost::multi_index::detail::index_node_base<int> >* b) to boost::multi_index::detail::sequenced_index_node_impl* c) to boost::multi_index::detail::index_node_base<int>*
Actually, not. I was simply drag&dropping the next_ pointer so that the watch window derived the casts (it needs all explicit template parameters, hence the mpl::na everywhere). The only cast I was doing was the boost::multi_index::detail::index_node_base<int>* cast of the next_ pointer, which, as it seems, is not enough.
That is, if x is of type sequenced_index_node_impl you get to the full node by evaluating:
(boost::multi_index::detail::index_node_base<int>*) (boost::multi_index::detail::sequenced_index_node< boost::multi_index::detail::index_node_base<int> >*) (boost::multi_index::detail::sequenced_index_node_trampoline< boost::multi_index::detail::index_node_base<int> >*)x
When I applied the above-mentioned casts to the next_ pointer, I saw the
int!! :-) I even tried substituting "next_" with "next_->next_" and I
saw the other elements.
The entire watch window expression to view the first element of the
container is:
(int&)((((*(boost::multi_index::detail::pod_value_holder<int>*)(&*(boost::multi_index::detail::index_node_base<int>*)(boost::multi_index::detail::sequenced_index_node *)(boost::multi_index::detail::sequenced_index_node_trampoline *)(&x)).member)).next_)))).space).data_).buf Thanks for now! Now I'll try to make a visualizer for this container and
see if that can be extended to other containers.
Cheers,
Filip