Hello,
I have a bit of code that's giving me some trouble, but I can't make sense of the error. It boils down to an ambiguous call that I can't, for the life of me, figure out why is ambiguous.
Code then errors:
Code:
template<class numeric_type>
struct diff_less_t
{
diff_less_t(numeric_type subtracted) : sub(subtracted) {}
bool operator() ( const typename std::map<numeric_type, numeric_type>::value_type & a,
const typename std::map<numeric_type, numeric_type>::value_type & b )
{
return std::abs(a.first-sub) < std::abs(b.first-sub);
}
private:
numeric_type sub;
};
template<typename numeric_type>
diff_less_t<numeric_type> diff_less(numeric_type sub) { return diff_less_t<numeric_type>(sub); }
//. . . . quite a while later . . .
//xmatch is a long double
map<long double, long double>::iterator it = min_element(points.begin(), points.end(), diff_less(xmatch));
errors:
Code:
extractpoints.cpp: In member function ‘bool diff_less_t<numeric_type>::operator()(const typename std::map<numeric_type, numeric_type, std::less<_Key>, std::allocator<std::pair<const numeric_type, numeric_type> > >::value_type&, const typename std::map<numeric_type, numeric_type, std::less<_Key>, std::allocator<std::pair<const numeric_type, numeric_type> > >::value_type&) [with numeric_type = long double]’:
/usr/include/c++/4.2/bits/stl_algo.h:4974: instantiated from ‘_ForwardIterator std::min_element(_ForwardIterator, _ForwardIterator, _Compare) [with _ForwardIterator = std::_Rb_tree_iterator<std::pair<const long double, long double> >, _Compare = diff_less_t<long double>]’
extractpoints.cpp:66: instantiated from here
extractpoints.cpp:16: error: call of overloaded ‘abs(long double)’ is ambiguous
/usr/include/stdlib.h:691: note: candidates are: int abs(int)
/usr/include/c++/4.2/cstdlib:143: note: long int std::abs(long int)
/usr/include/c++/4.2/cstdlib:174: note: long long int __gnu_cxx::abs(long long int)
extractpoints.cpp:16: error: call of overloaded ‘abs(long double)’ is ambiguous
/usr/include/stdlib.h:691: note: candidates are: int abs(int)
/usr/include/c++/4.2/cstdlib:143: note: long int std::abs(long int)
/usr/include/c++/4.2/cstdlib:174: note: long long int __gnu_cxx::abs(long long int)
Thanks for any help.