Because class Base2 does not contain a member "B".
It isn't derived from any other class, so the statement
Return C + b
Does not know about any object called "B" to use.
Perhaps, if you derived the class Base2 from Base1 or Derived1 it would work as you want?