Вы можете использовать следующую черту типа:
#include
template
struct is_equality_comparable : std::false_type
{ };
template
struct is_equality_comparable() == std::declval(), (void)0)
>::type
> : std::true_type
{
};
Что вы бы испытали следующим образом:
struct X { };
struct Y { };
bool operator == (X const&, X const&) { return true; }
int main()
{
static_assert(is_equality_comparable::value, "!"); // Does not fire
static_assert(is_equality_comparable::value, "!"); // Does not fire
static_assert(is_equality_comparable::value, "!"); // Fires!
}