この記事はアドベントカレンダーの反省会的記事である。まずは以下のコードを見て欲しい。
このコードはill-formedだ。gccでもVC++でもそうである。
これはpush_back内部でunique_ptrのコピーコンストラクタを呼ぼうとしているからだ。
エラーメッセージ的にそうとしか考えられない。では次のコードはどうか。
これはwell-formedだ。gccでもVC++でもそうである。何が異なるか。
早い話が後者はpush_backの引数が無名オブジェクト、つまり右辺値であるのに対し
前者は普通のオブジェクト、つまり左辺値であるからだ。
前者ではpush_back(const type&)が呼ばれ後者ではpush_back(type&&)が呼ばれる。
要は右辺値についての説明がなければunique_ptrとSTLの連携については語れないわけで。
それがなかったため記事の一部を削除する羽目になったのである。
KMC関係者各位や該当記事を読んでいただいた方には申し訳なく思っている。
PR