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