https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116057
--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The question comes is this defined or undefined? I think it is still undefined. Changing: Maybe() : has_value_(false) {} into: Maybe() : has_value_(false), value_() {} Makes this well defined. And has no effect on if value_ had a constructor or not.