Use union instead of boost::optional