After reading the wiki (very informative!), I wonder whether there is a need at all for all this complex machinery. I would like the idea of a `directive` helper, but I would rather have it be `directive<Derived, Subject>` and set all the default typedefs that I can later "override" on my derived class. What is the benefit of all this complex machinery over a traditional CRTP approach?

To clarify: I would rather have `directive` choose sensible defaults for me, and let me override them just as I would in any other parser.