________________________________________ De: boost-users-bounces@lists.boost.org [boost-users-bounces@lists.boost.org] En nombre de JOAQUIN M. LOPEZ MUÑOZ [joaquin@tid.es] Enviado el: miércoles, 10 de septiembre de 2008 20:34 Para: boost-users@lists.boost.org Asunto: Re: [Boost-users] [bind] [multi-index] Create type of pointer to overloaded erase method
________________________________________ De: boost-users-bounces@lists.boost.org [boost-users-bounces@lists.boost.org] En nombre de Steven Watanabe [watanabesj@gmail.com] Enviado el: miércoles, 10 de septiembre de 2008 18:54 Para: boost-users@lists.boost.org Asunto: Re: [Boost-users] [bind] [multi-index] Create type of pointer to overloaded erase method
AMDG
Peter Barker wrote:
RecordsContainer::size_type (RecordsContainer::*erase)(unsigned int) = &RecordsContainer::erase;
but it failed to compile. Visual Studio 2003 gives me the following error on the above line: <snip>
The following compiles for me with msvc 9.0
int main() { RecordsContainer::size_type (RecordsContainer::*erase)(unsigned int) = &RecordsContainer::erase; }
Oddly enough, it fails with MSVC++ 8.0 (though it shouldn't since your call_traits analysis is correct):
error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'boost::multi_index::detail::ordered_index
::size_type (__thiscall boost::multi_index::multi_index_container ::* )(unsigned int)'
But the following works: int main() { typedef RecordsContainer::index<RecsByID>::type RecordsContainerByID; RecordsContainerByID::size_type (RecordsContainerByID::*erase)(unsigned int) = &RecordsContainerByID::erase; } even though my previous approach is IMHO still better. Joaquín M López Muñoz Telefónica, Investigación y Desarrollo