I'd like to modify_key() for a composite_key of a multi_index_container that contains a shared_ptr. I found a thread in this mailing list dealing with a similar kind of situation, not totally the same though: "[Boost-users] [multi_index] modify problem with composite_key" My example: This compiles fine: struct entry { entry(int a, int b):m_x(a), m_y(b){} int m_x; int m_y; }; typedef multi_index_container< entry, indexed_by< ordered_unique< composite_key< entry, member<entry,int,&entry::m_x>, member<entry,int,&entry::m_y>>>>> C; void updateX(C::iterator iter,int x, C& m_c) { m_c.get<0>().modify( iter, (&ll::_1)->*&entry::m_x=x); } My first problem is if I change modify to modify_key I get the following error: operator_lambda_func_base.hpp(237) : error C3892: 'boost::lambda::detail::select' : you cannot assign to a variable that is const My second problem is that instead of typedef multi_index_container< entry, indexed_by< ordered_unique< composite_key< entry, member<entry,int,&entry::m_x>, member<entry,int,&entry::m_y>>>>> C; i want to have a typedef multi_index_container< shared_ptr<entry>, indexed_by< ordered_unique< composite_key< entry, member<entry,int,&entry::m_x>, member<entry,int,&entry::m_y>>>>> C; Note the shared_ptr added. In this later case I get another error: boost\lambda\detail\member_ptr.hpp(512) : error C2440: 'newline' : cannot convert from 'const rt0 ' to 'entry *const ' I assume I need to change something around the _1 bit, but have no idea what. Thanks