Por que é 'X x; x (); ' permitido, quando 'X' define uma conversão em ponteiro de função, mas não quando define uma conversão em um 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 ?!
}
xemplo ao vivo no Ideone. Resultado
error: nenhuma correspondência para a chamada para '(Y) (int)'
Q1: Por que a chamada parax(5)
permitido, mesmo queX
define apenas uma conversão para funcionar como ponteiro, e nãooperator()
?
Q2: Por outro lado, por que a mesma coisa não é permitida, se definirmos uma conversão para outro functo