Hmm, a tl;dw would actually be nice
Don't overload operator|| and operator&&, because it'll never predict the outcome of the expression. Example:
fun(false) && (fun(true) || fun(false))
All 3 calls to fun will be made, where you could've known the outcome right after seeing that the left side of the && expression is false.