id summary reporter owner description type status milestone component version severity resolution keywords cc 12652 boost::optional::operator= chooses wrong overload for {} mathias@… Fernando Cacciola "{{{ boost::optional op = 5; // creates engaged optional op = {}; // currently does op = 0; }}} For most types operator={} assigns from a value-constructed value of that type. That is the behavior of std::experimental::optional but not boost::optional. It chooses the T&& overload. I think the standard avoids it by having the assign-from-T operator= be templated on U instead, which doesn't match {}. " Bugs closed Boost 1.63.0 optional Boost 1.63.0 Problem fixed