title: mysterious include of comdef.h
body: <p>In my project there are some compilation error <code>C2872</code> due to ambiguous definition of <code>byte</code>, after I set <a href="https://msdn.microsoft.com/en-us/library/hdkef6tk.aspx" rel="nofollow noreferrer"><code>-Include</code></a>, the output shows that <code>C2872</code> is due to the in included file:</p>
  
  <blockquote>
    <p>C:\Program Files (x86)\Microsoft Visual
    Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\include\comdef.h</p>
  </blockquote>
  
  <p>from one of my <code>myado.h</code> file.</p>
  
  <p>However, this is no such include anywhere in <code>myado.h</code>, how come it is included?</p>
  
  <p><code>myado.h</code> did something like this:</p>
  
  <pre><code>#import "C:/Program Files/Common Files/System/ado/msado15.dll"  rename("EOF", "adoEOF") rename("BOF", "adoBOF")
  
  #include &lt;icrsint.h&gt;  // ADO C/C++ Record Binding Definitions
  
  #define TESTHR(x) if FAILED(x) _com_issue_error(x)
  </code></pre>
  
  <p>, here <code>FAILED</code> is a macro defined in</p>
  
  <blockquote>
    <p>c:\Program Files (x86)\Windows
    Kits\10\Include\10.0.16299.0\shared\winerror.h</p>
  </blockquote>
  
  <p>and <code>_com_issue_error</code> is defined in</p>
  
  <blockquote>
    <p>c:\Program Files (x86)\Microsoft Visual
    Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\include\comutil.h</p>
  </blockquote>
  
  <p>is this the reason?</p>
  
  <p>But if this is the case, how were the header files got included, due to the marco usage?</p>
  
  <p>Or, how was c++ compiler visual studio recognize the macro definition?</p>