
Noah Roberts wrote:
In mem_fn.hpp (not sure what is doing this but my bet is bind or
It is bind.
function) there is a function dm<R,T>::call<U> that looks like so:
template<class U> R const & call(U & u, void const *) const { return (get_pointer(u)->*f_); }
...
1>d:\boostvs39\include\boost\bind\mem_fn.hpp(334) : error C4716: 'boost::_mfi::dm<void __thiscall(unsigned int),esi::units::unit_settings>::call<esi::pipeflo::document::unit_pool * const>' : must return a value
dm<> is the data member implementation, that is, what mem_fn returns when passed a pointer to a data member. You're binding a member function, in this case one with the signature void (unit_settings::*)(unsigned)...
std::make_pair( boost::bind(&unit_settings::get_labels<pressure>, &units) , boost::bind(&unit_settings::set_selection <pressure>, &units) )
... and the problem is that you haven't supplied the _1: boost::bind( &unit_settings::set_selection<pressure>, &units, _1 ) and the data member overload gets used instead because it happens to accept the argument list (&unit_settings::set_selection<pressure>, &units). Annoying, I know. But relatively rare. :-)