Boost logo

Boost :

Subject: Re: [boost] [Boost.Math] Re: [Monotone-debian] Bug#653764: FTBFS with Boost 1.48: lgamma_small.hpp:483:38: error: expected primary-expression before 'do'
From: John Maddock (boost.regex_at_[hidden])
Date: 2012-01-02 04:22:48

>> I'm not in a position to verify this for myself for another week, but
>> I have a horrible feeling I know what's wrong: Monotone defines
>> several one-character macros for its own use, and L() is one of them.
>> It looks like Boost is using L() for its own purposes and expecting it
>> not to be a macro.
>Zack, you are absolutely right. The lgamma_small header has a templated
>class method using "L" as one of the templates:
>template <class T, class Policy, class L>
>T lgamma_small_imp(T z, T zm1, T zm2, const mpl::int_<0>&, const Policy&
>pol, const L&)
>The compile error at line 483 is at a call to L():
> result = log(gamma_imp(z, pol, L()));

This isn't new to 1.48: the code has used "L" as a template param since at
least 1.38.

>> I'd argue that Boost headers should take care to defend themselves
>> from the possibility of such macros, but fixing that in Boost might be
>> an enormous amount of work, and in any case, 1.48 is already out
>> there.

>Boost.Math developers: What is the right thing to do here? More
>descriptive class template parameters?

That's what I'll use as a fix in this case, in general though, we can only
fix "known issues" given that any symbol can be poisoned in the preprocessor

Thanks for the heads up, John.

Boost list run by bdawes at, gregod at, cpdaniel at, john at