[sigc] Renaming nil



Folks,

I need to include libsigc++ (C++) header files from an Objective-C++ file (yes, there is such a monstrosity). It fails to compile.

The problem is that:
o libsigc++ defines sigc::nil
o 'nil' is a reserved keyword of Objective-C (just like 'return' is a reserved keyword of C)
o Objective-C++ is a superset of Objective-C

For a few months, the workaround I used was to put this at the top of my Objective-C++ files, _before_ including any sigc header, of course:

   #define nil empty

Now is the time for me to do things right, and submit a fix upstream to libsigc++.

There are a few questions though:

1) Which name should we use instead of 'nil'? Murray recommends 'none'. I don't really care. I think the name is mostly seen during compile failures and debugging sessions. So we want something short, and we want something that is unlikely to conflict with C++-compatible languages.

2) Should we do the rename unconditionally or only if the headers are being read by an Objective-C++ compiler? I think it is fine to do it conditionally, to avoid introducing any source incompatibility (although I don't think people actually use 'nil' in their source code in practice, it is theoretically possible they are).

3) Will this introduce any binary incompatibility? Murray and I think it won't, because sigc::nil is only declared as a type, but it is never instantiated. As such, we don't think the libsigc++ library binary actually cares about it. And so far, my experiment seems to confirm that (linking and running my Objective-C++ code against the libsigc++ library binary seems to work fine). Is there a way to know for sure?

Your advise is welcome,
--
Regis "HPReg" Duchesne



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]