条件演算子で Boost.Optional を返す

覚書。

boost::optional<int> m = cond ? 42 : boost::none;


みたいな感じで boost::none を含めた条件演算子を書きたいんですが、これでは型が違ってしまい、エラーになってしまいます。
と、いうことでこれを回避する場合 boost::make_optional でラップします。

[ソース]

#include <boost/optional.hpp>
#include <iostream>


boost::optional<int>
func(bool cond){
    return cond ? boost::make_optional(42) : boost::none;
}


int
main(){
    boost::optional<int> m = true ? boost::make_optional(42) : boost::none;

    auto m1 = func(true);
    if( m1 ){
        std::cout << *m1 << std::endl;
    }

    auto m2 = func(false);
    if( !m2 ){
        std::cout << "Nothing" << std::endl;
    }
    return 0;
}

[出力]

42
Nothing