#include <iostream>
using namespace std;
struct Example {
Example(int x) {
cout << "Constructor!" << endl;
}
Example& operator=(int x) {
cout << "Assignment!" << endl; return *this;
}
};
int main() {
Example e = 1; // prints "Constructor!"
e = 2; // prints "Assignment!"
// The same symbol `=` actually does two different things
Example d{1}; // prints "Constructor!"
//d{2}; // Error
d = 2; // prints "Assignment!"
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEV4YW1wbGUgewogICAgRXhhbXBsZShpbnQgeCkgeyAKICAgICAgICBjb3V0IDw8ICJDb25zdHJ1Y3RvciEiIDw8IGVuZGw7IAogICAgfQogICAgRXhhbXBsZSYgb3BlcmF0b3I9KGludCB4KSB7IAogICAgICAgIGNvdXQgPDwgIkFzc2lnbm1lbnQhIiA8PCBlbmRsOyByZXR1cm4gKnRoaXM7IAogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBFeGFtcGxlIGUgPSAxOyAvLyBwcmludHMgIkNvbnN0cnVjdG9yISIKICAgIGUgPSAyOyAvLyBwcmludHMgIkFzc2lnbm1lbnQhIgogICAgLy8gVGhlIHNhbWUgc3ltYm9sIGA9YCBhY3R1YWxseSBkb2VzIHR3byBkaWZmZXJlbnQgdGhpbmdzCgogICBFeGFtcGxlIGR7MX07IC8vIHByaW50cyAiQ29uc3RydWN0b3IhIgogICAvL2R7Mn07IC8vIEVycm9yCiAgIGQgPSAyOyAvLyBwcmludHMgIkFzc2lnbm1lbnQhIgp9