#include <iostream>
#include <string>
using namespace std;
union U {
string s;
int i;
U (string s) : s(s) { cout << "s is active"<<endl;}
U (int i) : i(i) { cout << "i is active"<<endl;}
U() : s() { cout << "s is active by default" <<endl; }
~U() { cout << "delete... but what ?"<<endl; }
};
int main() {
U u("hello");
u.s += ", world";
cout << u.s <<endl;
u.i=0; // ouch!!! this is not the active member : what happens to the string ?
u.s="goodbye"; // thinks that s is an active valid string which is no longer the case
//cout << u.s <<endl; // ouch !?
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdW5pb24gVSB7CglzdHJpbmcgczsKCWludCBpOwoJVSAoc3RyaW5nIHMpIDogcyhzKSB7IGNvdXQgPDwgInMgaXMgYWN0aXZlIjw8ZW5kbDt9CglVIChpbnQgaSkgOiBpKGkpIHsgY291dCA8PCAiaSBpcyBhY3RpdmUiPDxlbmRsO30KCVUoKSA6IHMoKSB7IGNvdXQgPDwgInMgaXMgYWN0aXZlIGJ5IGRlZmF1bHQiIDw8ZW5kbDsgfQoJflUoKSB7IGNvdXQgPDwgImRlbGV0ZS4uLiBidXQgd2hhdCA/Ijw8ZW5kbDsgfQp9OwoKaW50IG1haW4oKSB7CglVIHUoImhlbGxvIik7IAoJdS5zICs9ICIsIHdvcmxkIjsgIAoJY291dCA8PCB1LnMgPDxlbmRsOwoJdS5pPTA7IC8vIG91Y2ghISEgdGhpcyBpcyBub3QgdGhlIGFjdGl2ZSBtZW1iZXIgOiB3aGF0IGhhcHBlbnMgdG8gdGhlIHN0cmluZyA/ICAKCXUucz0iZ29vZGJ5ZSI7ICAvLyB0aGlua3MgdGhhdCBzIGlzIGFuIGFjdGl2ZSB2YWxpZCBzdHJpbmcgd2hpY2ggaXMgbm8gbG9uZ2VyIHRoZSBjYXNlIAoJLy9jb3V0IDw8IHUucyA8PGVuZGw7ICAgIC8vIG91Y2ggICE/CglyZXR1cm4gMDsKfQ==