Louis Dionne <ldionne.2 <at> gmail.com> writes:
pfultz2 <pfultz2 <at> yahoo.com> writes:
[...]
There are two things here. First, the decision not to split the library into a thousand headers was considered a feature, because it meant that you did not need to include countless headers to get some functionality. Since the library is very lightweight, it does not cause a compile-time performance problem to include the whole list.hpp header.
Even so, in your implementation of list.hpp, it may not be performance hit to include it together, but perhaps as a user, I could be adapting a type where each of those methods are heavyweight, so I would want to seperate them out into seperate headers.
Ahhh, now I understand what you mean. I think that's possible and I'll reply when I'm fixed. Basically, I'll try to split the adaptor for Fusion into separate header and see if it works.
Ok, I tried it in a sandbox and here's what you could do: // In some forward declaration header. template <> struct Foldable::instance<YourDatatype> : Foldable::mcd { template <typename F, typename State, typename Xs> static constexpr auto foldl_impl(F f, State s, Xs xs); // other forward declarations ... }; // In some header holding the actual implementation of foldl. template <typename F, typename State, typename Xs> constexpr auto Foldable::instance<YourDatatype>:: foldl_impl(F f, State s, Xs xs) { // ... } Regards, Louis