ObjC pointer members are currently not allowed in unions in either C or C++ mode. This patch lifts the restriction in C++ mode.
This patch essentially treats ObjC pointer members the same way a non-static data member of a class type that has non-trivial special functions is treated. The ObjC pointer member causes all of the defaulted special functions of the union that directly contains the member to be defined as deleted, except when the member has an in-class initializer, the default constructor isn't defined as deleted.
rdar://problem/34213306
This comment should be talking about non-trivial ownership rather than just general ObjC pointer-ish-ness.