My other question was about the header-only design. Is there a reason why all of the code is being exported into the users codebase? Is it necessary? I think this should be a compiled + linked library, or it should be explained in the rationale.
I've been thinking about this... The cost of having the library header-only in this case is symbol pollution, bringing lots of otherwise encapsulated information.
Maybe non-header-only solution would be "cleaner" from a user's point of view?