Boost logo

Boost Users :

From: Joel de Guzman (joel_at_[hidden])
Date: 2004-06-24 21:37:00

Mark Storer wrote:

Hi Mark,

No chance of switching to 7.1? :-)

> I'm getting several compiler errors when trying to use the Spirit library.
> When compiling one of the samples from the v1.6 documentation, I get a linker error:
> SpiritTest.obj : fatal error LNK1179: invalid or corrupt file: duplicate comdat


This sometimes happen especially if you have complex expressions which generates
complex types. Often times, the problem is only seen at debug mode where the
functions are not fully inlined by the compiler. The solution is to break down
your expressions (sepecially subrules) into smaller chunks.

> c:\sdks\boost-1.30.2\boost\spirit\utility\impl\chset\basic_chset.ipp(32) : error C2955: 'arg' : use of class template requires template argument list
> c:\sdks\boost-1.30.2\boost\bind\arg.hpp(26) : see declaration of 'arg'


> The boost/bind include is in the core/composite/actions. Trying to mess with the order of inclusion seems Fraught With Peril. The basic_chset template is in "utility", and everything in "utility" depends on various bits and pieces of "core". basic_chset is derived from unary, which is defined in core/composite. A Gordian knot... and me without a sword.

This has been fixed in the current CVS but unfortunately didn't make it into
the Spirit 1.6 branch yet. Hopefully, a maintenance upgrade (v1.6.1) will be
provided. You can simply change all occurrances of "arg" to "arg_" to fix
the problem. Alternatively, you can update from the Spirit CVS, branch

This is again a VC++ bug.


Joel de Guzman

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at