title: What default promotions of types are there in the variadic arguments list?
body: <p>For example, I use <code>printf</code> function in C++ for 8-bit CPU (AVR). Is the following code safe:</p>
  
  <pre><code>uint8_t a = 5;
  printf("%d", a);
  </code></pre>
  
  <p>Here <code>%d</code> expects <code>int</code> (16-bit in my case, and at least 16-bit in any case), but I pass 8-bit integer.</p>
  
  <p>Does C/C++ standards guarantee that any type with rank lesser than <code>int</code> promoted to <code>int</code>?</p>
  
  <p>The same question for <code>float a</code> and <code>%f</code> that expects <code>double</code>, and other analogous types.</p>