bool operator()( const util::Value<T> &first, const ValueBase &second )const { // ask second for a converter from itself to Value<T> const ValueBase::Converter conv = second.getConverterTo( util::Value<T>::staticID ); if ( conv ) { //try to convert second into T and handle results util::Value<T> buff; switch ( conv->convert( second, buff ) ) { case boost::numeric::cPosOverflow: LOG( Debug, info ) << "Positive overflow when converting " << second.toString( true ) << " to " << util::Value<T>::staticName() << "."; return posOverflow( first, buff ); case boost::numeric::cNegOverflow: LOG( Debug, info ) << "Negative overflow when converting " << second.toString( true ) << " to " << util::Value<T>::staticName() << "."; return negOverflow( first, buff ); case boost::numeric::cInRange: return inRange( first, buff ); } } else { LOG( Debug, error ) << "No conversion of " << second.getTypeName() << " to " << util::Value<T>::staticName() << " available"; return false; } return false; }