При использовании std::bind
для привязки функции-члена первым аргументом является указатель объектов this
. Однако он работает, передавая объект как указатель, а не.
См., например, следующую программу:
#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 и GCC компилируют это без жалоб, и результат работает для обоих binds:
foo::bar - 1 foo::bar - 2
Я пытаюсь обвести голову вокруг спецификации (раздел 20.8.9), но это одно из мест, где это далеко не ясно для меня.
Должен ли только один быть правильным или оба правильны?