An overloaded function name represents all overloads, each of which has its own address. Thus, it cannot be allowed to a certain overload if there is no supporting context, for example, static casting is used:
static_cast<int(Foo::*)(const std::string&)>(&Foo::bar)
, , , , . , decltype declval:
std::is_same<decltype(std::declval<Foo&>().bar("")), int>::value