When you have a #ifdef SERVER_SIDE statement in an include file, 
    the program will ignore lines that fall under the #ifdef.  This 
    is helpful in developing a server/ambassador (aka client/server) 
    system.  Without this sort of feature you have two less than 
    satisfying options: 
    1. Send data between a server and ambassador that isn't 
       needed by an ambassador.
    2. Break your type into two types and maintain parallel 
       containers of the instances.  

    By using a #ifdef SERVER_SIDE statement you can keep the type 
    intact and don't have to send extraneous data.  Keep in mind 
    also that on the server side SERVER_SIDE should be defined for 
    the build process.  On the ambassador side it should not be 
    defined.  If the above is hard to follow, here is another 
    attempt.              

    struct FileInfo
    {
#ifdef 	SERVER_SIDE
      FileInfo() : isNew(1) {}

      private:
      short isNew;
      long modTime;
#endif

      private:
      unsigned int size;
    };

    The isNew and modTime fields of FileInfo are only needed by 
    the server.  You want to be able to send FileInfo objects 
    to ambassadors but they only need the size field.  Logically, 
    it makes sense to have the isNew and modTime fields be a part 
    of FileInfo, but doing so would mean having to send/receive 
    those two fields.  This dilemma is averted by using the 
    #ifdef SERVER_SIDE option.
 
    It might be helpful to compare the code that is output with
    and without a #ifdef SERVER_SIDE statement.