Boost logo

Boost :

Subject: [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: Steve M. Robbins (steve_at_[hidden])
Date: 2012-01-01 19:30:42


Boost Developers: I recently did rebuilds of all Debian packages that use Boost
with Boost 1.48 and this is one of the casualties of the upgrade (from 1.46.1).

On Sat, Dec 31, 2011 at 12:02:37PM +0100, Zack Weinberg wrote:
> On Fri, Dec 30, 2011 at 9:53 PM, Steve M. Robbins <smr_at_[hidden]> wrote:
> > This package failed to build using the newest Boost version 1.48:
> ...
> > /usr/include/boost/math/special_functions/detail/lgamma_small.hpp: In function 'T boost::math::detail::lgamma_small_imp(T, T, T, const mpl_::int_<0>&, const Policy&, const L&)':
> ...
> > /usr/include/boost/math/special_functions/detail/lgamma_small.hpp:483:38: error: expected primary-expression before 'do'
> 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()));

> 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?

Attached is a trivial file to reproduce the bug.


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