title: Strange behavior of Visual Studio preprocessor
body: <p>I'm currently working on VS2013 Community with C++/CLI. I wanted to do there some cross-platform abstract class, and to be smart enough I wrote header like this:</p>
  
  <pre><code>#ifndef SOMECLASS_H
  #define SOMECLASS_H
  
  #ifdef _MSC_VER
  #define PUBLIC_INTERFACE public interface
  #else
  #define PUBLIC_INTERFACE
  #endif
  
  PUBLIC_INTERFACE class SomeClass {
  public:
      virtual int DummyMethod(void) = 0;
  };
  
  #endif // SOMECLASS_H
  </code></pre>
  
  <p>The problem is with macro PUBLIC_INTERFACE which should on MS compiler gave me "public interface class" after preprocessor work done. Unfortunatelle what I have is "public struct class". Why?
  I was thinking that it is some special case and preprocessor want to do some special magic (I'm no an expert with managed C++), and I wrote:</p>
  
  <pre><code>#ifdef _MSC_VER
  public interface class SomeClass {
  #else
  class SomeClass {
  #endif
  public:
      virtual int DummyMethod(void) = 0;
  };
  </code></pre>
  
  <p>But in this case everything works fine and preprocessor yields me "public interface class". What is the reason of translating "interface" keyword in macro to "struct" keyword. Am I doing something wrong or this is some issue of MS preprocessor?</p>