title: Macro expansion with unary minus
body: <p>Consider the following code:</p>
  
  <pre class="lang-cpp prettyprint-override"><code>#define A -100
  
  //later..
  void Foo()
  {
    int bar = -A;
    //etc..
  }
  </code></pre>
  
  <p>Now, this compiles fine on some major compilers I tested (MSVC, GCC, Clang) and <code>bar == 100</code> as expected, this is because the preprocessors of all those compilers insert a space between the tokens so you end up with:</p>
  
  <pre class="lang-cpp prettyprint-override"><code>int bar = - -100;
  </code></pre>
  
  <p>As I'd like my code to be as portable as possible I went to check if this behavior is defined by the standard but I can't find anything on it. Is this behavior guaranteed by the standard or is this just a compiler feature and is the naive approach (which wouldn't compile obviously) <code>bar = --100;</code> allowed too?</p>