
AMDG Sandeep Gupta wrote:
I am sure this is due to some trivial mistake; the statement to create a pointer member function insert of multi_index container fails in the following code:
typedef multi_index_container< std::pair<int,int>, indexed_by< ordered_unique<member<pair<int,int>, int, &pair<int, int>::first> > > > mic;
std::pair<mic_index::iterator, bool> (mic_index::*fn)(pair<int,int>) = &mic_index::insert; //compile error
The error is due to mismatch in signature as given in the error: std::pair<boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<std::pair<int, int>, ... std::pair<boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<typename SuperMeta::type::node_type> >, bool>...
If need be I can post full error message. Appreciate any suggestions.
The signature is std::pair<mic_index::iterator, bool> (mic_index::*fn)(const pair<int,int>&); However, it is not usually a good idea to rely on the exact signature of library member functions. For instance, the standard library allows member functions to have extra default arguments. In the case of multi_index, using a reference to const will not always work because multi_index uses call_traits. In Christ, Steven Watanabe