boost::optional<int> const x = 42; // boost::optional<double> const y = x; // NG. optional<T> から optional<U> への変換は explicit boost::optional<double> y; y = x; // OK. optional<T> から optional<U> への代入は許されている // boost::optional<double> const z = boost::make_optional(0); // 同様にNG. boost::optional<double> z; z = boost::make_optional(0); // OK. あくまで初期化時のみの制約
なにこれ。代入と初期化で対称性がないとか…。
さっさと Boost.Optional は爆発して Boost.Maybe になるべきなのかもしれません。
標準ライブラリに入らなかったのが不思議なくらい便利なライブラリなので、尚更。
文字数的にもそっちの方が短いですしね。