#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;
}