Por qué es 'X x; X();' permitido, cuando 'X' define una conversión al puntero de función, pero no, cuando define una conversión a un functor?
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 ?!
}
jemplo de @Live en Ideone. Salida
error: no hay coincidencia para la llamada a '(Y) (int)'
Q1: ¿Por qué la llamada ax(5)
permitido, aunqueX
solo define una conversión al puntero de función, y nooperator()
?
P2: Por el contrario, ¿por qué no se permite lo mismo si definimos una conversión a otro functor?