generator_observable supports returning boost::none for ended()