#include <iostream>

using namespace std;

struct List
{
  List *next = 0;
};

List & operator ++ (List &x, int)
{
  x = *x.next;
  return x;
}

int main()
{
  List *lst = new List();
  lst->next = new List();
  
  cout << lst << ' ' << lst->next << endl;

  (*lst)++;
  cout << lst << ' ' << lst->next << endl;

  // Это упадёт
  //(*lst)++;
  //cout << lst << endl;

  List lst2;
  lst2.next = new List();

  cout << &lst2 << ' ' << lst2.next << endl;

  lst2++;
  cout << &lst2 << ' ' << lst2.next << endl;

  return 0;
}