title: What are the 15 classifications of types in C++?
body: <p>During a <a href="https://www.youtube.com/watch?v=a0FliKwcwXE&amp;feature=youtu.be&amp;t=2m51s" rel="noreferrer">CppCon2014 conference talk</a> by Walter E. Brown, he states that there are <strong>15 classifications</strong> of types in C++ that the standard describes.   </p>
  
  <p>"15 partitions of the universe of C++ types."<br>
  "<strong>void</strong> is one of them." -- Walter E. Brown. </p>
  
  <p>What are the other 14?</p>
  
  <hr>
  
  <p>While digging through the standard, I found the following:  </p>
  
  <pre><code>// 20.11.4.1
  primary type categories:
  template &lt;class T&gt; struct is_void;
  template &lt;class T&gt; struct is_integral;
  template &lt;class T&gt; struct is_floating_point;
  template &lt;class T&gt; struct is_array;
  template &lt;class T&gt; struct is_pointer;
  template &lt;class T&gt; struct is_lvalue_reference;
  template &lt;class T&gt; struct is_rvalue_reference;
  template &lt;class T&gt; struct is_member_object_pointer;
  template &lt;class T&gt; struct is_member_function_pointer;
  template &lt;class T&gt; struct is_enum;
  template &lt;class T&gt; struct is_union;
  template &lt;class T&gt; struct is_class;
  template &lt;class T&gt; struct is_function;
  
  // 20.11.4.2 
  composite type categories:
  template &lt;class T&gt; struct is_reference;
  template &lt;class T&gt; struct is_arithmetic;
  template &lt;class T&gt; struct is_fundamental;
  template &lt;class T&gt; struct is_object;
  template &lt;class T&gt; struct is_scalar;
  template &lt;class T&gt; struct is_compound;
  template &lt;class T&gt; struct is_member_pointer;
  </code></pre>
  
  <p>Hmm, that's more than 15. These are type traits anyhow.  They are used to test certain properties of types at compile time. For example, an <code>integer</code> type would give back true for <code>is_integral</code>, <code>is_fundamental</code>, and is <code>is_scalar</code>.  Perhaps the 15 are some of the ones listed above and the rest are sub categories to others.  </p>
  
  <hr>
  
  <p>Here's my attempt of trying to make a type tree of the language:  </p>
  
  <p><img src="https://i.stack.imgur.com/vrQDL.png" alt="enter image description here">  </p>
  
  <p>My guess:  </p>
  
  <pre><code> 1.  void 
   2.  bool
   3.  char 
   4.  nullptr 
   5.  integral (signed) 
   6.  integral (unsigned) 
   7.  floating
   8.  enum 
   9.  array 
   10. class 
   11. union 
   12. lvalue reference 
   13. rvalue reference 
   14. member object pointer 
   15. member function pointer
  </code></pre>
  
  <p>But also note that <code>bool</code>, <code>char</code>, and <code>enum</code> are all integral types, so I'm really not very confident in this list.</p>