#include <iostream>
struct foo {
  int data;
  foo() {}
  foo(const foo& other) {
    this->data = 0;
  }
  foo& operator= (foo& other) {
    this->data=other.data++;
    return *this;
  }
};
int main()
{
  foo a, c;
  a.data = 2;
  foo b = a;
  c = a = b;
  std::cout << a.data << " " << b.data << " " << c.data;
}