Hi,

I have the following definition of the classes
class DataRecordMap
{
        private:
                typedef boost::shared_ptr<const DataRecord        >        DataRecordPtr;
                typedef std::pair<std::string, DataRecordPtr>        key_type;
                typedef double value_type;

                struct keyComp
                {
                        bool operator() (const DataRecordMap::key_type &lhs,
                                                         const DataRecordMap::key_type &rhs) const;
                };

        private:
                typedef std::map<key_type, value_type, keyComp>        map_type;

                const std::vector<size_t>        m_index;        
                map_type                                        m_records;

        public:
                DataRecordMap(const std::vector<size_t> &idx);
                void add(DataRecordPtr secondKey, double value);
                double operator[] (const DataRecord &value) const;
                double& operator[] (const DataRecord &secondKey);

                friend std::ostream& operator << (std::ostream& out, const DataRecordMap &records);

};

Then it fails to compile on this implementation:

double DataRecordMap::operator[] (const DataRecord &secondKey) const
{
        std::string firstKey(secondKey.compareKey(m_index)->signature());

        map_type::const_iterator findIt(std::find_if(m_records.begin(), m_records.end(),
                                                                                        boost::bind(&map_type::key_type::first, _1) == firstKey));
       
        if(findIt==m_records.end())
                THROW_EXCEPTION("Key " << firstKey << " not found in the data records");

        return (*findIt).second;
}

Could someone please help me with it? The error is:

1>------ Build started: Project: compare, Configuration: Debug Win32 ------
1>Compiling...
1>diffTool.cpp
1>d:\dev\soho_new\thirdparty\boost\bind\mem_fn.hpp(333) : error C2784: 'T *boost::get_pointer(const boost::shared_ptr<X> &)' : could not deduce template argument for 'const boost::shared_ptr<X> &' from 'const std::pair<_Ty1,_Ty2>'
1>        with
1>        [
1>            _Ty1=const `anonymous-namespace'::DataRecordMap::key_type,
1>            _Ty2=`anonymous-namespace'::DataRecordMap::value_type
1>        ]
1>        d:\dev\soho_new\thirdparty\boost\smart_ptr\shared_ptr.hpp(550) : see declaration of 'boost::get_pointer'
1>        d:\dev\soho_new\thirdparty\boost\bind\mem_fn.hpp(352) : see reference to function template instantiation 'const R &boost::_mfi::dm<R,T>::call<const U>(U &,const void *) const' being compiled
1>        with
1>        [
1>            R=std::string,
1>            T=std::pair<std::string,`anonymous-namespace'::DataRecordMap::DataRecordPtr>,
1>            U=std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type>
1>        ]
1>        d:\dev\soho_new\thirdparty\boost\bind\bind.hpp(243) : see reference to function template instantiation 'const R &boost::_mfi::dm<R,T>::operator ()<A1>(const U &) const' being compiled
1>        with
1>        [
1>            R=std::string,
1>            T=std::pair<std::string,`anonymous-namespace'::DataRecordMap::DataRecordPtr>,
1>            A1=std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type>,
1>            U=std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type>
1>        ]
1>        d:\dev\soho_new\thirdparty\boost\bind\bind_template.hpp(318) : see reference to function template instantiation 'R boost::_bi::list1<A1>::operator ()<const std::basic_string<_Elem,_Traits,_Ax>&,F,A>(boost::_bi::type<T>,F &,A &,long)' being compiled
1>        with
1>        [
1>            R=const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,
1>            A1=boost::arg<1>,
1>            _Elem=char,
1>            _Traits=std::char_traits<char>,
1>            _Ax=std::allocator<char>,
1>            F=boost::_mfi::dm<std::string,std::pair<std::string,`anonymous-namespace'::DataRecordMap::DataRecordPtr>>,
1>            A=const boost::_bi::list1<const std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type> &>,
1>            T=const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &
1>        ]
1>        d:\dev\soho_new\thirdparty\boost\bind\bind.hpp(237) : see reference to function template instantiation 'const std::basic_string<_Elem,_Traits,_Ax> &boost::_bi::bind_t<R,F,L>::eval<const boost::_bi::list1<A1>>(A &)' being compiled
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>,
1>            _Ax=std::allocator<char>,
1>            R=const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,
1>            F=boost::_mfi::dm<std::string,std::pair<std::string,`anonymous-namespace'::DataRecordMap::DataRecordPtr>>,
1>            L=boost::_bi::list1<boost::arg<1>>,
1>            A1=const std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type> &,
1>            A=const boost::_bi::list1<const std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type> &>
1>        ]
1>        d:\dev\soho_new\thirdparty\boost\bind\bind.hpp(303) : see reference to function template instantiation 'const std::basic_string<_Elem,_Traits,_Ax> &boost::_bi::list1<A1>::operator []<const std::basic_string<_Elem,_Traits,_Ax>&,boost::_mfi::dm<R,T>,boost::_bi::list1<boost::arg<I>>>(boost::_bi::bind_t<const std::basic_string<_Elem,_Traits,_Ax> &,F,L> &) const' being compiled
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>,
1>            _Ax=std::allocator<char>,
1>            A1=const std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type> &,
1>            R=std::string,
1>            T=std::pair<std::string,`anonymous-namespace'::DataRecordMap::DataRecordPtr>,
1>            I=1,
1>            F=boost::_mfi::dm<std::string,std::pair<std::string,`anonymous-namespace'::DataRecordMap::DataRecordPtr>>,
1>            L=boost::_bi::list1<boost::arg<1>>
1>        ]
1>        d:\dev\soho_new\thirdparty\boost\bind\bind_template.hpp(47) : see reference to function template instantiation 'R boost::_bi::list2<A1,A2>::operator ()<bool,F,boost::_bi::list1<const std::pair<_Ty1,_Ty2> &>>(boost::_bi::type<T>,F &,A &,long)' being compiled
1>        with
1>        [
1>            R=bool,
1>            A1=boost::_bi::bind_t<const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,boost::_mfi::dm<std::string,std::pair<std::string,`anonymous-namespace'::DataRecordMap::DataRecordPtr>>,boost::_bi::list1<boost::arg<1>>>,
1>            A2=boost::_bi::value<std::string>,
1>            F=boost::_bi::equal,
1>            _Ty1=const `anonymous-namespace'::DataRecordMap::key_type,
1>            _Ty2=`anonymous-namespace'::DataRecordMap::value_type,
1>            T=bool,
1>            A=boost::_bi::list1<const std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type> &>
1>        ]
1>        c:\program files\microsoft visual studio 8\vc\include\algorithm(87) : see reference to function template instantiation 'bool boost::_bi::bind_t<R,F,L>::operator ()<std::pair<_Ty1,_Ty2>>(const A1 &)' being compiled
1>        with
1>        [
1>            R=bool,
1>            F=boost::_bi::equal,
1>            L=boost::_bi::list2<boost::_bi::bind_t<const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,boost::_mfi::dm<std::string,std::pair<std::string,`anonymous-namespace'::DataRecordMap::DataRecordPtr>>,boost::_bi::list1<boost::arg<1>>>,boost::_bi::value<std::string>>,
1>            _Ty1=const `anonymous-namespace'::DataRecordMap::key_type,
1>            _Ty2=`anonymous-namespace'::DataRecordMap::value_type,
1>            A1=std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type>
1>        ]
1>        c:\program files\microsoft visual studio 8\vc\include\algorithm(96) : see reference to function template instantiation '_InIt std::_Find_if<std::_Tree<_Traits>::const_iterator,_Pr>(_InIt,_InIt,_Pr)' being compiled
1>        with
1>        [
1>            _InIt=std::_Tree<std::_Tmap_traits<`anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type,`anonymous-namespace'::DataRecordMap::keyComp,std::allocator<std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type>>,false>>::const_iterator,
1>            _Traits=std::_Tmap_traits<`anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type,`anonymous-namespace'::DataRecordMap::keyComp,std::allocator<std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type>>,false>,
1>            _Pr=boost::_bi::bind_t<bool,boost::_bi::equal,boost::_bi::list2<boost::_bi::bind_t<const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,boost::_mfi::dm<std::string,std::pair<std::string,`anonymous-namespace'::DataRecordMap::DataRecordPtr>>,boost::_bi::list1<boost::arg<1>>>,boost::_bi::value<std::string>>>
1>        ]
1>        d:\dev\ownprogs\compare\compare\difftool.cpp(166) : see reference to function template instantiation '_InIt std::find_if<std::_Tree<_Traits>::const_iterator,boost::_bi::bind_t<R,F,L>>(_InIt,_InIt,_Pr)' being compiled
1>        with
1>        [
1>            _InIt=std::_Tree<std::_Tmap_traits<`anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type,`anonymous-namespace'::DataRecordMap::keyComp,std::allocator<std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type>>,false>>::const_iterator,
1>            _Traits=std::_Tmap_traits<`anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type,`anonymous-namespace'::DataRecordMap::keyComp,std::allocator<std::pair<const `anonymous-namespace'::DataRecordMap::key_type,`anonymous-namespace'::DataRecordMap::value_type>>,false>,
1>            R=bool,
1>            F=boost::_bi::equal,
1>            L=boost::_bi::list2<boost::_bi::bind_t<const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,boost::_mfi::dm<std::string,std::pair<std::string,`anonymous-namespace'::DataRecordMap::DataRecordPtr>>,boost::_bi::list1<boost::arg<1>>>,boost::_bi::value<std::string>>,
1>            _Pr=boost::_bi::bind_t<bool,boost::_bi::equal,boost::_bi::list2<boost::_bi::bind_t<const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,boost::_mfi::dm<std::string,std::pair<std::string,`anonymous-namespace'::DataRecordMap::DataRecordPtr>>,boost::_bi::list1<boost::arg<1>>>,boost::_bi::value<std::string>>>
1>        ]
1>d:\dev\soho_new\thirdparty\boost\bind\mem_fn.hpp(333) : error C2784: 'T *boost::get_pointer(const std::auto_ptr<_Ty> &)' : could not deduce template argument for 'const std::auto_ptr<_Ty> &' from 'const std::pair<_Ty1,_Ty2>'
1>        with
1>        [
1>            _Ty1=const `anonymous-namespace'::DataRecordMap::key_type,
1>            _Ty2=`anonymous-namespace'::DataRecordMap::value_type
1>        ]
1>        d:\dev\soho_new\thirdparty\boost\get_pointer.hpp(25) : see declaration of 'boost::get_pointer'
1>d:\dev\soho_new\thirdparty\boost\bind\mem_fn.hpp(333) : error C2784: 'T *boost::get_pointer(T *)' : could not deduce template argument for 'T *' from 'const std::pair<_Ty1,_Ty2>'
1>        with
1>        [
1>            _Ty1=const `anonymous-namespace'::DataRecordMap::key_type,
1>            _Ty2=`anonymous-namespace'::DataRecordMap::value_type
1>        ]
1>        d:\dev\soho_new\thirdparty\boost\get_pointer.hpp(18) : see declaration of 'boost::get_pointer'
1>d:\dev\soho_new\thirdparty\boost\bind\mem_fn.hpp(333) : error C2784: 'T *boost::get_pointer(const boost::reference_wrapper<T> &)' : could not deduce template argument for 'const boost::reference_wrapper<T> &' from 'const std::pair<_Ty1,_Ty2>'
1>        with
1>        [
1>            _Ty1=const `anonymous-namespace'::DataRecordMap::key_type,
1>            _Ty2=`anonymous-namespace'::DataRecordMap::value_type
1>        ]
1>        d:\dev\soho_new\thirdparty\boost\ref.hpp(182) : see declaration of 'boost::get_pointer'
1>Build log was saved at "file://d:\Dev\OwnProgs\compare\compare\Debug\BuildLog.htm"
1>compare - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
___________________________________________________________
This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is prohibited.

Please refer to http://www.bnpparibas.co.uk/en/information/legal_information.asp?Code=ECAS-845C5H  for additional disclosures.