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)'
В1. Почему разрешен вызов x(5)
, хотя X
определяет только преобразование в указатель на функцию, а не operator()
?
Вопрос 2. И наоборот, почему то же самое нельзя сделать, если мы определяем преобразование в другой функтор?