void f(int){}
typedef void (*f_ptr)(int);
struct Functor{
void operator()(int){}
};
struct X{
operator f_ptr(){ return f; }
};
struct Y{
operator Functor(){ return Functor(); }
};
int main(){
X x; Y y;
x(5); // works ?!
y(5); // doesn't ?!
}
Exemple en direct sur Ideone . Production:
erreur: aucune correspondance pour l'appel à '(Y) (int)'
Q1: Pourquoi l'appel à x(5)
autorisé, même si X
définit uniquement une conversion en pointeur de fonction, et non operator()
?
Q2: Inversement, pourquoi la même chose n'est-elle pas autorisée, si nous définissons une conversion vers un autre foncteur?