There is a (seemingly) nice C++03 way of finding out if a type has a member function or operator:
https://github.com/jaredhoberock/is_call_possible/blob/master/is_ca
This works with all test cases given in the GitHub (Demo: http://ideone.com/ZLGp4R):
#include
template
struct is_call_possible : public std::false_type {};
template
struct is_call_possible::value ||
std::is_convertible().operator()(std::declval()...)
// ^^^^^^^^^^ replace this with the member you need.
), R>::value
>::type
> : public std::true_type {};