[GCC-XML] GCCXML and sigc++ 2.0.18

Brad King brad.king at kitware.com
Wed Jun 4 21:20:09 EDT 2008


Julian Bunn wrote:
> I am having trouble with GCCXML (0.9.0) parsing slot.h in version 2.0.18 of
> sigc++. I'm not quite sure how to tackle this, or what the problem is.
> 
> I'm not even sure if I should be asking here :-)
> 
> Any suggestions gratefully accepted.
> 
> $ "J:/gccxml/bin/bin/debug\gccxml.exe"  
> "../libsigc++-2.0.18/sigc++/signal.h" -fxml=signal.xml
> In file included from ../libsigc++-2.0.18/sigc++/signal_base.h:28,
>                  from ../libsigc++-2.0.18/sigc++/signal.h:8:
> ../libsigc++-2.0.18/sigc++/functors/slot.h: In static member function 
> 'static T_return sigc::internal::slot_call1<T_functor, T_retur
> n, T_arg1>::call_it(sigc::internal::slot_rep*, typename 
> sigc::type_trait<T_arg3>::take)':
> ../libsigc++-2.0.18/sigc++/functors/slot.h:136: error: expected `(' 
> before '>' token

It looks like that line has a macro that is defined with various 
compiler work-arounds.  Which definition of the macro gets used is 
determined at preprocessing time.  Since gccxml pretends to be the 
native compiler at preprocessing time the package is selecting the wrong 
options.  The fix is to teach the code (libsigc++) about gccxml as if it 
were another compiler.  It can recognize gccxml using the "__GCCXML__" 
preprocessor symbol.  The Boost C++ project has already done this and is 
gccxml-aware.

I just took a quick look at the libsigc++ source.  It looks like they do 
a configure-time check for this compiler feature and then hard-code the 
configured sigc++config.h header with the answer.  Something in there 
will have to change to recognize gccxml at preprocessing time even when 
the header has been configured with another compiler.  You'll have to 
bring this up with the authors of libsigc++.

-Brad


More information about the gccxml mailing list