title: Are signed, unsigned, long and short all valid types in all versions of C and C++?
body: <p>In N3797 7.1.1/3 there is the following note:</p>
  
  <p><code>Note: Since signed, unsigned, long, and short by default imply int, a type-name appearing after one of those specifiers is treated as the name being (re)declared.</code></p>
  
  <p>But this is only a note. Is there somewhere in the standard that makes a normative statement to the same effect?</p>
  
  <p>Is is proper standards-compliant C and C++ to use <strong>signed</strong>, <strong>unsigned</strong>, <strong>long</strong> and <strong>short</strong> without <strong>int</strong> in each and every situation? </p>
  
  <p>Or, to put it in code, are the following standards-compliant and if so where does it say so?</p>
  
  <pre><code>signed a;
  unsigned b;
  short c;
  long d;
  signed f(signed p, unsigned q, short r, long s);
  unsigned* f(signed* p, unsigned* q, short* r, long* s);
  </code></pre>
  
  <p>[I hesitate to ask whether it's recommended or preferred, for fear of getting opinion-based answers.]</p>