title: Macro NO_ERROR conflict
body: <p>In <code>winerror.h</code>:</p>
  <pre><code>...
  #define NO_ERROR 0L // dderror    
  ...                                         
  </code></pre>
  <p>In <code>ErrorHelper.h</code> :</p>
  <pre><code>...
  namespace ErrorCodes
  {
      enum Error
      {
          NO_ERROR = 0,// Not an error
          ...
      }
  }
  ...
  </code></pre>
  <p>Even if <code>#undef NO_ERROR</code> is written before the <code>namepsace</code>the conflict still appears.</p>
  <h3>How can it be possible to get rid of this macro conflicts?</h3>
  <p>Is it somehow possible to bypass macro like this?</p>
  <pre><code>#define min(a,b)            (((a) &lt; (b)) ? (a) : (b))
  ...
  (std::min)(a, b); // std::min used instead of evil macro
  </code></pre>
  <p>Error occures in every line with <code>ErrorCodes::Error::NO_ERROR;</code>:</p>
  <pre><code>Error   C2059   syntax error: '::'  
  
  Error   C2589   'constant': illegal token on right side of '::' 
  </code></pre>
  <p>This conflict occurs with Visual Studio Compiler but compiles on Linaro GCC Snapshot 6.2-2016.11.</p>