The compiler does not take into account how you are using the return value in its determination; that's not part of the rules. It doesn't know if you're doing
std::string name = b->Name();
or
b->Name() = "me";
It has to choose the version that works in both cases.