On Sun, Mar 19, 2017 at 6:51 PM, Vicente J. Botet Escriba via Boost < boost@lists.boost.org> wrote:
Have you considered the possibility to provide algorithms taking HOF as well as template aliases?
This is a false dilemma, these are _not_ mutually exclusive, one can have the exact same lazy API with eager alias templates alone by using bind<> instead. Following is a snippet using Metal, that implements the cartesian product of a List by itself. Notice how the upper case are in fact just lazy adaptors to the eager algorithms metal provides (lower case letters), all written using eager alias templates. using namespace metal; template<typename... args>using Transform = bind<lambda<transform>, args...>; template<typename... args>using Bind = bind<lambda<bind>, args...>; template<typename arg>using Quote = bind<lambda<bind>, args>; template<typename x>using product = apply< lambda<join>, transform<Transform<Bind<quote<lambda<list>>, Quote<_1>, quote<_1>>, quote<x>>, x>
;
Bruno Dutra