Mix-in というか,クラスに対して aspective な機能の injection をやろうとするときには,クラスに随伴する名前空間(associated namespaces)に ADL hook を追加するっつーのが最近の C++ での流行なんだろうか? ちぅか,Boost のその系統のライブラリはすべからくそうなっているしにゃー.で,動的多相性が欲しければ type erasure pattern と.これで concept checking があると,純粋仮想基底クラス(インターフェース)の意義が真剣に分からなくなってくるんだけれどどーなんだろうか.仮想関数でできて type erasure でできないことってあるのかにゃー? covariant return type ぐらいしか思いつかないんだけれど.知らんけど.
こういうのが実際に現在の C++ が志向している方向だとするなら,ADL hook 問題が確実に重要視されてくるはず.っていうか,すでにかなりされてるけれど.特に「自由関数にはスコープがあって無いようなものだ問題」あるいは「関数テンプレートの部分特殊化 v.s. ADL 依存のオーバーロード」は早く決着つけて欲しい.ちなみに,汎用自由関数が ADL を通じてあらゆる名前空間を汚染しかねないという問題は,よくよく考えてみたらクラススコープでも名前が汚されるのは変わらないじゃないかと最近思い始めた.しかし,「向こうでも問題で,こちらに固有の問題じゃないよ」っつー弁解はあまりに消極的すぎてダメポ.知らんけど.
後,個人的に顕著な問題だと感じるのが,クラスのメンバ関数として提供される機能と,随伴する名前空間に inject される機能のインターフェースの非対称性の問題か.これに関する議論やっているの見たことないけれど不思議で仕方ない.Evolution WG issues list の ES061 とかあるからこれを問題視している人いるは確実にはずなんだけどにゃー.知らんけど.
っていうか,要するに Boost の人たちにライブラリ設計の本を書いていただきたく…….