Not exactly sure what the compiler is trying to say there, but your first operator overload (with Book& return value) is just plain wrong, because you are trying to return a local object by reference, which means you're returning garbage.
Why? Book b3 only exists inside the scope of your operator function. It is popped off the stack once the function returns, and your returned Book reference now refers to an invalid value that no longer exists. It's undefined behavior to use it.