I'm currently using the `is_call_possible` 3rd party code

<https://github.com/jaredhoberock/is_call_possible>

to figure out at compile time if a member is available. This example works great:

```
#include <string>
#include "is_call_possible.h"

DEFINE_IS_CALL_POSSIBLE(is_call_possible, operator())
DEFINE_IS_CALL_POSSIBLE(test_available, test)

struct Foo {
  void operator()(double) {}
  double test(std::string) { return 0; }
};

int main(int argc, const char * argv[]) {
  static_assert(is_call_possible<Foo, void(double)>::value,"err"); //success
  static_assert(test_available<Foo, double(std::string)>::value,"err"); //success
  return 0;
}

```

But this doesn't work on ordinary non-members so I can't do the same for the output and relational operators:

```
DEFINE_IS_CALL_POSSIBLE(output_available, operator<<) //error
DEFINE_IS_CALL_POSSIBLE(less_available, operator<) //error
DEFINE_IS_CALL_POSSIBLE(greater_available, operator>) //error

```

Can you point me to convenient 3rd party code (or your own code) to accommodate this?

The underlying solution (the "3rd party code") can be implemented in C++11 if it's easier, but I guess I won't notice the difference in my own code (as a user of the 3rd party code).