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 ?!
}
Ideoneの実例。出力:
エラー:「(Y)(int)」の呼び出しに一致しません
Q1:関数ポインタへの変換のみを定義し、定義しx(5)
ていないのに、なぜ呼び出しが許可されるのですか?X
operator()
Q2:逆に、別のファンクターへの変換を定義した場合、同じことが許可されないのはなぜですか?