title: Is it valid to use boolean literals in preprocessor conditionals?
body: <p>Consider the following code, which results in the boolean literal <code>true</code> being evaluated in a preprocessor conditional:</p>
  
  <pre><code>#define SOME_MACRO true
  
  int main ()
  {
  #if SOME_MACRO
    return 1;
  #else
    return 0;
  #endif
  }
  </code></pre>
  
  <p>Clang 3.4 and GCC 4.8 both accept this code, even with <code>-pedantic -std=c++11 -Wall -Wextra</code>.</p>
  
  <p>Visual Studio 2013 rejects it, with <a href="http://msdn.microsoft.com/en-us/library/h5sh3k99.aspx" rel="nofollow">fatal error C1017: invalid integer constant expression</a>.</p>
  
  <p>My reading of <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3376.pdf" rel="nofollow">n3376</a> §
  16.1 is that the regular C++ rules for evaluating constant expressions should apply.</p>
  
  <p>If so, this code is valid, and it's a bug if MSVC does not accept it.</p>
  
  <p>But I don't find the standardeze particularly clear. Could someone confirm this?</p>