On Tue, Oct 02, 2007 at 03:18:15PM -0400, Roger Clark wrote:
> Most of the header is already surrounded with extern "C", but not the
> offending part. Just wanted to give someone a heads up.

I just changed it, but it doesn't do any good.  My understanding is
that 'extern "C"' is only for linkage, and it doesn't keep the
compiler from interpreting "class" as a C++ keyword.

For example, the following C++ is invalid:
   extern "C" {
     struct s { int class; };
   }

So, it looks like we've got a few options here:
  1) Rename the field and break old code that uses it.  I think I may
     be the only user of this interface, so this wouldn't necessarily
     be a tragedy... but if there are others, we might cause them some
     grief.

  2) Do some malarkey like

struct evdns_server_request {
   /* ... */
#ifdef __cplusplus
    int dns_question_class;
#else
    int class;
#define dns_question_class class
#endif
  /* ... */
};

     so that we don't break existing C code that uses the field, but
     we start building under C++, and everybody can start migrating to
     the question_class field name.

  3) Do something like

struct evdns_server_request {
   /* ... */
#ifdef __cplusplus
    int dns_question_class;
#else
    int class;
#endif
  /* ... */
};
     so that we break absolutely no old code, and C++ starts working.
     Of course, this would give the field a different name in C than
     in C++, and that's not so great.

yrs,
-- 
Nick Mathewson

Attachment: pgpVc3QaMJg7s.pgp
Description: PGP signature

_______________________________________________
Libevent-users mailing list
Libevent-users@monkey.org
http://monkey.org/mailman/listinfo/libevent-users

Reply via email to