Я пытаюсь создать пример, который бы проверял существование operator==
(функция-член или не-член). Проверить, является ли класс членом operator==
, легко, но как проверить, имеет ли он нечлен operator==
?
Это то, что мне нужно:
#include <iostream>
struct A
{
int a;
#if 0
bool operator==( const A& rhs ) const
{
return ( a==rhs.a);
}
#endif
};
#if 1
bool operator==( const A &l,const A &r )
{
return ( l.a==r.a);
}
#endif
template < typename T >
struct opEqualExists
{
struct yes{ char a[1]; };
struct no { char a[2]; };
template <typename C> static yes test( typeof(&C::operator==) );
//template <typename C> static yes test( ???? );
template <typename C> static no test(...);
enum { value = (sizeof(test<T>(0)) == sizeof(yes)) };
};
int main()
{
std::cout<<(int)opEqualExists<A>::value<<std::endl;
}
Можно ли написать тестовую функцию для проверки существования нечлена operator==
?
Если да, то как?
btw Я проверил похожие вопросы, но не нашел правильного решения:
Можно ли использовать SFINAE/templates для проверки наличия оператора?
Это то, что я пробовал:
template <typename C> static yes test( const C*,bool(*)(const C&,constC&) = &operator== );
но компиляция завершается с ошибкой, если удаляется оператор-член ==