Lorsque vous utilisez std::bind
pour lier une fonction membre, le premier argument est les objets this
pointeur. Cependant, il fonctionne en passant l'objet à la fois comme un pointeur et non.
Voir par exemple le programme suivant :
#include <iostream>
#include <functional>
struct foo
{
void bar(int v) { std::cout << "foo::bar - " << v << '\n'; }
};
int main()
{
foo my_foo;
auto f1 = std::bind(&foo::bar, my_foo, 1);
auto f2 = std::bind(&foo::bar, &my_foo, 2);
f1();
f2();
}
Clang et GCC compilent tous les deux sans se plaindre, et le résultat fonctionne pour les deux liaisons :
foo::bar - 1
foo::bar - 2
J'ai essayé de comprendre la spécification (section 20.8.9) mais c'est l'un des endroits où elle est loin d'être claire pour moi.
Un seul doit-il être correct, ou les deux le sont-ils ?