When used std::bind, I found & is necessary to get the address of member functions, while isn't necessary for regular functions, for example:
class Obj{
public:
void member_func(int val);
};
void func(int val);
int main(){
Obj obj;
auto mf1 = std::bind(&Obj::member_func, &obj, 1); // ok
auto mf2 = std::bind(Obj::member_func, &obj, 1); // error
auto f1 = std::bind(&func, 1); // ok
auto f2 = std::bind(func, 1); // ok
}
And after STFW(Search The Friendly Web :) ), I found this in cpp reference
An lvalue of function type T can be implicitly converted to a prvalue pointer to that function. This does not apply to non-static member functions because lvalues that refer to non-static member functions do not exist.
Which explains why & is necessary for member functions, but I still don't fully understand why there is no implicit conversions to pointers of member functions?
In particular, what does "lvalues that refer to non-static member functions do not exist" mean?
And "lvalue of function type" also confuses me, does that mean the function designator func is an lvalue?
First time to ask question, hope I clearly explained my question.