Как std::function может принимать все объекты функций с одинаковой сигнатурой оператора вызова функции?
Мне интересно, как std::function
может принимать объекты разных типов, если они имеют одинаковую сигнатуру оператора вызова функции. Например, эти две структуры явно не связаны, и все же один и тот же объект std::function может быть назначен им обоим.
struct A {
int operator()(int a) {
return a;
}
};
struct B {
int operator()(int a) {
return a;
}
};
int main() {
function<int(int)> f;
f = B{}; //OK
f = A{}; //OK
}
Может кто-нибудь объяснить, как это возможно?