Как 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
}

Может кто-нибудь объяснить, как это возможно?

0 ответов

Другие вопросы по тегам