title: Colon after class member declaration?
body: <p>I recently encountered some very strange syntax:</p>
  
  <pre><code>struct Test {
      size_t a : 2;
      size_t b : 3;
      size_t c : 4;
  };
  </code></pre>
  
  <p>Strangely, this compiles with GCC 4.9.2 with all warning flags turned on. </p>
  
  <pre><code>void test_test() {
      Test test;
      std::cout &lt;&lt; test.a &lt;&lt; " " &lt;&lt; test.b &lt;&lt; " " &lt;&lt; test.c &lt;&lt; std::endl;
  } 
  </code></pre>
  
  <p>While declaring test gives no errors and outputs <code>0 0 0</code> (I believe 0 is just coincidental; since the struct is Plain Old Data, none of its members are default initialized to 0), changing
  the declaration to a definition via <code>Test test();</code> gives the error</p>
  
  <pre><code>tester.cpp:14:20: error: request for member 'a' in 'test', which is of non-class
   type 'Test()'
  </code></pre>
  
  <p>Enabling C++11 removes the error messages, but the values still remain enigmatically 0. <strong>What does this syntax achieve</strong>?</p>