title: Are there language constructs that are valid for type-name but not for fundamental types?
body: <p>I noticed that pseudo destructor call is valid when a <em>type-name</em> is used but not when a fundamental type is used.</p>
  
  <pre><code>typedef int BType;
  int b;
  b.~BType();   // Legal
  b.~int();     // Not legal
  </code></pre>
  
  <p>An explanation for the above can be found at <a href="https://stackoverflow.com/a/24000642/434551">an answer to another SO post</a>.</p>
  
  <p>Definition of <em>type-name</em>, from the C++11 Standard:</p>
  
  <blockquote>
    <p><strong>7.1.6.2 Simple type specifiers, p1</strong></p>
  
  <pre>
  <em>type-name:</em>  
     <em>class-name</em>   
     <em>enum-name</em>  
     <em>typedef-name</em>  
     <em>simple-template-id</em>
  </pre>
  </blockquote>
  
  <p>Are there any other language constructs that are valid when the type specifier is a <em>type-name</em> but not valid when it is a fundamental type even when the <em>type-name</em> represents a fundamental type, as shown above?</p>