Передача параметром указателя на функцию и указателя на функцию-член с экземпляром
Изучая STL заметил удобную фичу, позволяющую, по необходимости, обрабатывать как функцию, так и функцию-член с экземпляром класса, которому принадлежит данная функция, аля:
class A {
public:
void f() {}
};
int main()
{
std::once_flag on;
A a;
std::call_once(on, &A::f, a);
}
Подскажите, каким образом это реализуемо? Что за механизм? В этом как то замешано std::tuple? Как изменить класс A для возможности использовать такую "перегрузку"? f(&A::f, a); or f(&f);
В стандарт глядел, но не переварил(. Не откажусь от литературы по этому поводу.