title: reinterpret_cast between ponter and different size intgeral type
body: <p>What actually happens when we do the following:
  1)  </p>
  
  <pre><code>int i = -1; // 32 bit
  void *p;
  p = reinterpret_cast&lt;void*&gt;(i) 
  </code></pre>
  
  <p>on 64 bit architecture, sizeof(void*) == 8 </p>
  
  <p>2) </p>
  
  <pre><code>long long i; // 64 bit
  void *p = (unsigned int)(-1);
  i = retinterpret_cast&lt;long long&gt;(p) 
  </code></pre>
  
  <p>on 32 bit architecture sizeof(void*) = 4</p>
  
  <p>I generally understand what will be the result, but I want somebody to describe the mechanism in terms of the C++ standard for better understanding.</p>
  
  <p>In the second case the behaviour is like those described in "integral promotions"(4.5) (i will be -1)
  for the case "int - unsigned long", so do we generally say that pointers are converted like signed integers?</p>
  
  <p>3) </p>
  
  <pre><code>int i = ...;
  unsigned long long L = ...;
  i = L;
  </code></pre>
  
  <p>What rules apply here?</p>