
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.