getting error: cannot take the address of an rvalue of type 'int'
<p>I tryed to compile old code with new compiler and got the next error:</p>

<pre><code>error: cannot take the address of an rvalue of type 'int'
</code></pre>

<p>Here is the example with 2 lines - one that compiles and the other that gives an error</p>

<pre><code>struct mstct {
    int myfield;
    int myfield2[5];
    int myfield3[5];
};

typedef struct mstct db_data_px;

int foo(int a, int b, int c){

  //the next code compiles successfully.
  unsigned val1 = ((18 == c) ? ((unsigned) &amp; (((db_data_px *) 0)-&gt;myfield)) : ((unsigned) &amp; (((db_data_px *) 0)-&gt;myfield3[b]))); //successes


  //the next code is failing
  unsigned val2 = (unsigned) &amp; ((18 == c) ? (((db_data_px *) 0)-&gt;myfield) : (((db_data_px *) 0)-&gt;myfield3[b]));
  return 0; // failing
}
</code></pre>

<p>Why the first line compiles and the second is failing ? Why do I need to cast (unsigned) &amp; in both of the select expression and it is not enough to cast only after the select expression is valued ?</p>