title: Why can I use size_t and std::size_t in MSVS without the traditional headers?
body: <p>I am working with Visual Studio 2017 Community Edition. It allows me to use both <code>size_t</code> and <code>std::size_t</code> without the appropriate includes. It appears to work with most of the std library. I assume it is because parts of the library itself use it. For instance <em>one example</em> that I found led to this behave was with <code>vector</code>. </p>
  
  <pre><code>#include &lt;vector&gt;
  #include &lt;iostream&gt;
  
  int main()
  {
      size_t a = 42;
      std::size_t b = 0;
      std::cout &lt;&lt; a &lt;&lt; b;
      std::cin.ignore();
  }
  </code></pre>
  
  <p>Presumably this is because the <code>size()</code> function returns an <code>std::size_t</code>. Is this just a header dependency and I can avoid it with the proper include? That still doesn't explain why I can call it with the namespace scope.</p>
  
  <p>(<em>I'm not using <code>using namespace std</code></em>.)</p>
  
  <p><a href="https://stackoverflow.com/questions/36594569/which-header-should-i-include-for-size-t">This question</a> implies that not all headers in the std library should have the definition.</p>