&演算子のオーバーロードの罠

予想外のエラーがでて悩んでいました。なぜかオーバーロードしたものではなくデフォルトの自分自身のポインタを返すoperator&が呼ばれてしまう...
&演算子に限ったことではなくオーバーロードのどの関数が呼ばれるかという問題であることに気づきました。
 エラーを出しているところをよく見てみるとconstメンバ関数だったんですね。そしてオーバーロードしているのは非constメンバ関数。つまりconstな&演算子はオーバーロードされているわけではないのでデフォルトの&演算子が呼ばれてしまうというわけです。というわけで演算子をオーバーロードする場合もconstにできるときはconstにして宣言した方が無難なのかもしれません。
 constをできる限りつける癖が付いていないとは僕もまだまだ修行が足りませんね...