以前、
それでも Boost.Optional を使う、大きく分けて2つくらいの理由 - 野良C++erの雑記帳
という記事を書いたのですが、
その中の boost::optional
この post を見て、慌てて確認したところ、 boost::optional
If *this was initialized, T's assignment operator is used, otherwise, its copy-constructor is used.
と公式ドキュメント *1 に書いてあるので、
boost::optional
で、それに対する対処方法としては、
boost::optional<int const> x = 0; x = boost::in_place(1);
とする方法を思いついたのですが、実はこれもコンパイルエラー。
ですが、これに関しては、そうなる(文法上、あるいは「あえてしている」なら、あえてそうしている)理由がよく分かりません。
operator= がそうなってるのは、効率を考慮すると極めて妥当だと思いますが、これは禁止する理由もないですし。
というわけで、機会があったら調べてみたいと思います。
正直 僕としては、 boost::optional
例の記事のコードは、全部ちゃんとテストした筈なのですが…。
この辺は僕の理解が浅かったと反省すると共に、
この際なので boost::optional 辺りのメーリスをざっとチェックして、
必要とあればパッチを書いて送ってみるのも悪くないかな、と思ってます。
ただまぁ boost::optional は古いコンパイラにも対応してるライブラリなので、
僕が出来ることはそれほどない気もしますが…。
アキラさんも最近いろいろと活躍してるみたいですし、負けてられませんね。