動機: boost::optionalだけじゃなくboost::eitherがほしい - Faith and Brave - C++で遊ぼう Boost.Optional は C++ でも屈指の便利ライブラリですが、 「戻り値として使う」場合には、時々「失敗した」という状況の他に、失敗した状況を示すような値が返せると嬉しい場合があります。 つまり、関数本来の戻り値の代わりに、それとは別の型でエラー情報を返すことも出来る、 要するに Haskell で言うところの Either a b があるといい、ということです。 これを C++ で実現するためには、一見して Boost の Variant を使うことで boost::variant<string, double> sqrt_either( double x ) { if( x < 0 ){ return "negative number