title: getting error: cannot take the address of an rvalue of type 'int'
body: <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>