値セマンティクスの型消去

ところで, Type Erasure で思い出したけれど
http://d.hatena.ne.jp/Cryolite/20051003#p1
の2番目について「こちらは参照・ポインタセマンティクスを持つ.値のセマンティクスは持てない.」って書いたけれど,これは若干間違いで,コンストラクタで new したオブジェクトを void * で持って, vtbl にデストラクタ呼び出しを追加すれば普通に値セマンティクスも持てまふ. clone に相当する関数も vtbl に持てばコピーセマンティクスもふつーに持てますよ,っと.
#っていうかコメントで教えてもらった boost::function (の関数オブジェクト用の実装)ってまさにそれやん…….
っていうか,上のダブルディスパッチの問題は Type Erasure に値セマンティクスを持たせるときに同値関係のセマンティクス (operator==),あるいは一般に2項関係をどうやったら実装できるかって考えたときにぶち当たった問題だったり.