#include <iostream>
struct A {
//A & operator = ( A & ) { return *this; }
A & operator = ( A & ) = default;
};
int & foo( int n ) {
std::cout << n << ' ';
static int x;
return x;
}
A & bar( int n ) {
std::cout << n << ' ';
static A a;
return a;
}
int main() {
foo( 1 ) = foo( 2 ) = foo( 3 ); // 1, 2, 3
std::cout << std::endl;
bar( 1 ) = bar( 2 ) = bar( 3 ); // 3, 2, 1
std::cout << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCnN0cnVjdCBBIHsKICAgIC8vQSAmIG9wZXJhdG9yID0gKCBBICYgKSB7IHJldHVybiAqdGhpczsgfQogICAgQSAmIG9wZXJhdG9yID0gKCBBICYgKSA9IGRlZmF1bHQ7Cn07CiAKaW50ICYgZm9vKCBpbnQgbiApIHsKICAgIHN0ZDo6Y291dCA8PCBuIDw8ICcgJzsKICAgIHN0YXRpYyBpbnQgeDsKICAgIHJldHVybiB4Owp9CiAKQSAmIGJhciggaW50IG4gKSB7CiAgICBzdGQ6OmNvdXQgPDwgbiA8PCAnICc7CiAgICBzdGF0aWMgQSBhOwogICAgcmV0dXJuIGE7Cn0KIAppbnQgbWFpbigpIHsKICAgIGZvbyggMSApID0gZm9vKCAyICkgPSBmb28oIDMgKTsgLy8gMSwgMiwgMwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgIGJhciggMSApID0gYmFyKCAyICkgPSBiYXIoIDMgKTsgLy8gMywgMiwgMQogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKfQ==