自分の理解不足と説明不足です。申し訳ありません。

自分が質問したかったことは、
>>749の1,の時点で
処理を終わらせること(Hogeとboolの区別)が出来ないのでしょうか?ということです。

それぞれ下記のように別々の関数を用意すれば、
Hoge AndHoge(Hoge& b, Hoge& c)
bool AndBool(Hoge& b, Hoge& c)
それぞれが、1,までの処理で済むのですが、
operator&を使った場合、戻り値を2種類以上実現しようすると、
2,以降の処理が必要になるということでいいんですよね?