boost::operatorsこにゃにゃちわ

boost::operatorsを覗いてみる.っていうか覗いてみた.
http://www.boost.org/libs/utility/operators.htm
提供している機能は非常にシンプルで昔っから言われてきたこと(演算子同士の(およびPODの演算子との)整合性を取れ.通常の演算子(+とか-とか)は代入演算子(+=とか-=とか)に委譲する形のコードにしろ.うんぬん)そのまんまのことをクラスとして提供しているだけだけれど,その機能の提供の仕方が'`,、('∀`) '`,、な感じ.templateに慣れている人は,見たらすぐにCRTP(curiously recursive template pattern: あるクラスの基底クラスのtemplate引数にそのクラスを入れてしまう書き方)にchained inheritance(template引数でクラスの基底クラスを指定するトリックを延々繰り返して,クラスの派生関係を鎖のように生成する書き方)を組み合わせたものって分かるんだろうけれど,初めて見る人にとっては面食らうこと請け合いの書き方.継承chainの終端をempty classにしているのも「このお茶目さんっw('A`)」って感じ・・・いや,optionalなtemplate引数を提供するのに必要なのは分かるんですけどね.わざわざchained inheritanceを使っているのもEBCO(Empty Base Class Optimization: メンバの無い空の基底クラスのサイズを0にする最適化のこと)が効かないcomplilerのためっつーのも分かるんですが・・・.
後,実装も覗いてみましたがプリプリ(←プリプロセッサマクロのことを個人的にこう読んでる)だらけ(演算子の定義は一文字変わるだけってのが多いのでこの利用は納得できる)なのは良いとして,globalのfriend関数の定義には当たり前のようにBarton-Nackman Trick(friend関数の定義をクラススコープ内に書く方法)(#20040501追記:Barton-Nackman Trickではなく,Friend Name Injectionという名称のほうが適切だと思われます)が使われていました・・・っていうかそれが知りたかったので実装覗いてみたんですがw.
いやぁ,boostの実装はどれを見ても勉強になるものばかりですなぁ'`,、('∀`) '`,、.orz