
On Tue, Apr 19, 2011 at 11:57 AM, Christopher Schmidt < mr.chr.schmidt@online.de> wrote:
falcou <Joel.Falcou@lri.fr> writes:
The following code
doesn't compile and i cant get the why of it.
The goal is to have a fusion transform_if that takes a compile-time predicates For each element int he sequence, if the predicates its true, we apply some transform on it, if not we return the element unchanged.
What am I missing ?
The MPL lambda template type parameter of the functor that is passed to Fusion causes the trouble. This functor is used by Fusion as a template type parameter for an internal metafunction class which turns into an (invalid) lambda expression due to the nested placeholder. Making 'preds' a metafunction class, e.g. via mpl::quote1, should make your code compile fine.
Could this be considered a Boost.Fusion bug? Seems like it would be Boost.Fusion's job to insulate any template parameters it receives from unintentional lambda substitution. [I making this comment under the assumption that I understand the problem, which may not be the case.] - Jeff