Je suis en train de créer un exemple, qui permettrait de vérifier l'existence de l' operator==
(membre ou non-membre de la fonction). Pour vérifier si une classe a un membre de l' operator==
est facile, mais comment faire pour vérifier si il est un non-membre de l' operator==
?
C'est ce que j'ai à présent :
#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;
}
Est-il possible d'écrire une fonction de test pour tester l'existence de la non-membre de l' operator==
?
Si oui, comment?
btw, j'ai vérifié sur des questions similaires, mais je n'ai pas trouvé une bonne solution :
Est-il possible d'utiliser SFINAE/modèles de vérifier si un opérateur n'existe?
C'est ce que j'ai essayé :
template <typename C> static yes test( const C*,bool(*)(const C&,constC&) = &operator== );
mais la compilation échoue si la non-membre de l'opérateur== est supprimé