title: Is a header necessarily a file?
body: <p>T.C. left an interesting comment to my answer on this question:</p>
  
  <p><a href="https://stackoverflow.com/a/27261018/1128289">Why aren't include guards in c++ the default?</a></p>
  
  <p>T.C. states:</p>
  
  <blockquote>
    <p>There's "header" and there's "source file". "header"s don't need to be
    actual files.</p>
  </blockquote>
  
  <p>What does this mean?</p>
  
  <p>Perusing the standard, I see plenty of references to both "header files" and "headers". However, regarding <code>#include</code>, I noticed that the standard seems to make reference to "headers" and "source <strong>files</strong>". (C++11, § 16.2)</p>
  
  <pre><code>A preprocessing directive of the form
      # include &lt; h-char-sequence&gt; new-line
  searches a sequence of implementation-defined places for a header identified uniquely
  by the specified sequence between the &lt; and &gt; delimiters, and causes the replacement
  of that directive by the entire contents of the header. How the places are specified
  or the header identified is implementation-defined.
  </code></pre>
  
  <p>and</p>
  
  <pre><code>A preprocessing directive of the form
      # include " q-char-sequence" new-line
  causes the replacement of that directive by the entire contents of the source *file*
  identified by the specified sequence between the " delimiters. The named source *file*
  is searched for in an implementation-defined manner.
  </code></pre>
  
  <p>I don't know if this is significant. It could be that "headers" in a C++ context unambiguously means "header files" but the word "sources" would be ambiguous so "headers" is a shorthand but "sources" is not. Or it could be that a C++ compiler is allowed leeway for bracket includes and only needs to act as if textual replacement takes place.</p>
  
  <p>So when are header (files) not files?</p>
  
  <p><em>The footnote mentioned by T.C. in the comments below is quite direct:</em></p>
  
  <blockquote>
    <p>174) A header is not necessarily a source file, nor are the sequences
    delimited by &lt; and > in header names necessarily valid source file
    names (16.2).</p>
  </blockquote>