On 2014-04-22 15:42, Louis Dionne wrote:
Some of the core features of the (current) new library require diverging from the MPL in the following ways: - No more iterators. They do not bring anything performance-wise and they make the implementation of sequences considerably more complicated. - Laziness. This is a key point to improve expressiveness and could also improve performance in some use cases. I'm still investigating on that matter though. - No more implicit lambda expressions. These interact poorly, leading to counterintuitive behavior as in [1]. Usage of aliases could make the problem even worse.
I think laziness and explicit lambda expressions are both important changes and make the life of metaprogram authors easier (both for development and debugging metaprograms). I've spent a lot of time debugging issues related to implicit lambda expressions during the development and maintenance of code based on the current MPL. Lazy code is compact and readable, but be careful with its impact on compilation speed and memory usage. It might significantly increase the number of template instantiations you need to make. (See "Boosting MPL with Haskell elements" from last year's C++Now for further details). Regards, Ábel