The increment is done immediately after the value is used, which is a fairly precise definition of "when". It is the order of evaluation of arguments to a function that was left implementation dependent, although I do not believe that you would ever get "printf x,x+1;x+=1" (from your example).
    int x = 1;
    // Could be 1, 1 or 2, 1 depending on order of evaluation of args.
    printf( "%d, %d\n", x, x++);

    x = 1;
    // Guaranteed 1, 1 (order of evaluation defined)
    cout << x << ", " << x++ << endl;