Hi Samuel,

Before I go further into this, there are 2 things I'd like you to consider:
- Could you please use the transform_variant and compress_variant helper functions I've put in place instead of the heavy MPL manipulations you're doing? I think that's exactly what you were trying to do (and I agree it's the right thing to do). You have an example in the perimeter algorithm.
- Could you detach the handling of default strategies into an actual resolve_strategy step? You can take examples from various algos, it basically uses an instance of default_strategy class in the no-strategy free function, which is then passed along to resolve_strategy since it can only be resolved when variants are resolved.

I suspect those 2 things will make the code clearer.

Thanks
Bruno