Consider the following code snippet: #include <iostream> #include <boost/multi_index_container.hpp> #include <boost/multi_index/ordered_index.hpp> #include <boost/multi_index/member.hpp> using namespace std; using namespace boost::multi_index; struct LinkList; struct LinkList { size_t index; LinkList* parent; LinkList(size_t index, LinkList* parent) : index(index), parent(parent) {} }; struct llindex {}; typedef ordered_unique<tag<llindex>, member<LinkList, size_t, &LinkList::index> > LinkListIndex; typedef boost::multi_index_container<LinkList, indexed_by<LinkListIndex> > IndexedLinkList; template <typename T> void show(T& iterable) { for(auto const& element: iterable) { if(element.parent != nullptr) { std::cout << "Index<" << element.index << ">: " << element.parent->index << std::endl; } else { std::cout << "Index<" << element.index << ">: " << "NULL" << std::endl; } } } int main() { IndexedLinkList ill; auto &index_ll = ill.get<0>(); ill.insert(LinkList{0, nullptr}); ill.insert(LinkList{1, (LinkList*)(&(*index_ll.find(0)))}); ill.insert(LinkList{2, (LinkList*)(&(*index_ll.find(0)))}); ill.insert(LinkList{3, (LinkList*)(&(*index_ll.find(2)))}); show(ill); return 0; } Would (LinkList*)(&(*index__ll.find(value))) be the recommended way to fetch the pointer to parent?