There is a difference between C and C++ relative to the prefix increment operator ++
.
In C the result is the new value of the operand after incrementation. So in this expression &(++num)
there is an atttempt to get the address of a temporary object (rvalue).
In C++ the program will be correct because in C++ the result is the updated operand; it is an lvalue.
That is in C the result is a new value while in C++ the result is the updated operand.
So in C you may not for example write
++++++x;
while in C++ this expression
++++++x;
is correct and you may apply the unary operator &
to the expression like
&++++++x;
To make the function correct in C you have to separate the applied operators like
int *foo(void) {
static int num = 1;
++num;
//return &(++num);
++num;
return #
}