Why does that code does not compile due to an error:
#include <iostream>
using namespace std;
int main()
{
    int i = 0; 
    cout << ++(i++) << " " << i << endl;
    return 0;
}
While that code does compile:
#include <iostream>
using namespace std;
int main()
{
    int i = 0; 
    cout << (++i)++ << " " << i << endl;
    return 0;
}
I do not understand that. From my point of view it would be pretty reasonable for the first chunk to compile. The expression ++(i++) would just mean take i, increment it and output, then increment it again.
I am not asking about an undefined behavior in int overflow. I do not know about r and l value at all at the time of writing the question and I do not care why is ++i considered an l-value, but i++ is not.
 
     
     
     
     
    