title: Is it possible for _M_X64 to be unset on a x64 processor?
body: <p>Visual Studio Compilers(2005 through 2008) defines four macros for x86/x64 bit environment. Refer <a href="http://msdn.microsoft.com/en-us/library/b0084kay.aspx" rel="nofollow">Predefined Macros</a></p>
  
  <ul>
  <li>_M_X64 Defined for x64 processors.</li>
  <li>_M_IX86 Defined for x86 processors. See the Values for _M_IX86 table below for more information. This is not defined for x64 processors.</li>
  <li>_WIN32 Defined for applications for Win32 and Win64. Always defined. </li>
  <li>_WIN64 Defined for applications for Win64.</li>
  </ul>
  
  <p>Now on a x32 bit machine _M_X64 would never be set. On a 64 bit machine, if you are building on a 32 bit environment _M_X64 would be unset and _M_IX86 would be defined. _WIN32 is always defined irrespective of a 32/64 bit build. </p>
  
  <p>Across all x64 processors, is there special significance of _M_X64? Can there be a scenario when _M_X64 is undefined when target is x64?</p>