Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2007-03-20 14:16:30

on Tue Mar 20 2007, "Daniel Walker" <> wrote:

> Hello,
> Section 3.2.3 of the Boost Parameter Library documentation prescribes
> a remedy for lazy binding ArgumentPacks directly using the Boost
> Lambda Library. I encountered some compilation errors when attempting
> this.

Interesting; that example passed our automated tests.

> The problem is that both parameter::keyword and the lambda expression
> have overloads of operator||. Since using lambda expressions in
> conjunction with parameter::keywords is an intended use case for
> Boost.Parameter, why not resolve the problem by providing an
> operator|| specifically for this case?
> template <class Tag, class Default>
> aux::lazy_default<Tag, lambda::lambda_functor<Default> >
> operator||(keyword<Tag> const& key,
> lambda::lambda_functor<Default> const& default_)
> {
> return key.operator||(default_);
> }
> The attached patch implements this. Apply with 'patch -p0 <
> djw_lazy_binding.patch' from the boost root directory.

Seems like a good idea. Please submit this to the SF patch tracker.

> However, after the patch is applied the following errors occur.
> $ g++ -I./boost lazy_binding_errors.cpp 2>&1 | perl
> ...
> lazy_binding_errors.cpp:24: error: conversion from 'void' to non-scalar type
> 'string' requested
> ./boost/boost/parameter/aux_/arg_list.hpp:136: error: return-statement with a
> value, in function returning 'void'
> ...
> $
> These errors happen because lazy binding ultimately depends on
> boost::result_of to deduce the type of the lambda expression, but
> boost::result_of doesn't handle lambda expressions. This issue can be
> resolved by applying the two patches I submitted previously.
> mpl patch:
> utility patch:

Please submit those to the tracker, too.

> These patches do not need to be applied in any particular order.
> Applying all three has the effect of making lazy binding behave more
> like the description in the documentation. I ran the Boost Parameter
> Library test suite and everything passed. Let me know if I've
> misunderstood something or if there's a better way to solve this
> problem or if you'd like additional documentation/tests.

I don't have any suggestions, though maybe Daniel W. does.

Dave Abrahams
Boost Consulting

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