return boost::optional from intersect methods