move_ptr

http://lists.boost.org/MailArchives/boost/msg70905.php
(-_- )キタッ!
スケッチ程度のものかと思っていたら,ドキュメントも素晴らしいじゃないですか!
http://home.comcast.net/~jturkanis/move_ptr/
staticとdynamic2つ用意してるぅ!うぉー!!
当然staticは空のdeleterに対してはcompressが効くと!うぉー!!
dynamicは当然deleterの型が消えてると!うぉー!!

With dynamic_move_ptr, the deletion policy is applied correctly even if one or more derived-to-base conversions has occured during transfers of ownership.

ま,これはshared_ptrでもやってるから良いとして,
T[ ]による特殊化!うぉー!!
TとT[ ]では一部インターフェースが違う(operator->, operator[], operator*の有無)のね.こりゃ極めて妥当ですな.
さらにT[ ]に対して

Derived-to-base conversions with respect to the element type are disallowed.

あぁ,言われてみれば確かにそうだわな.「配列を多相的に扱うな」*1をクラスの側で実現してくれるのか.
あ,結局SFINAEによるトリッキーな実装じゃなくて無難にMOJOぽくタグ付けした実装なのね.
コンテナに入れられるっていうのはどこにも書いてないな〜.コンテナの実装によって入る/入らないが変わるからかのぉ.auto_ptr並に軽くてコンテナに突っ込めるっていうのがmove_ptrの強烈な利点のはずなんだけどな.これさえ出来たら「コンテナにポインタ入れたいんですけど」->「shared_ptr使え」->「shared_ptr重いよ」というやり取りをもう見ずに済むんだけどなぁ.
move semantics生かしたコンテナとアルゴリズムの登場を気長に待つしかないのか・・・.
#というか現状じゃ標準のコンテナには入らないな.move semantics生かせるようにコンテナの実装書き直し?うげー.

*1:参考:More Efeective C++ 項目3,標準 5.3.5 -3-