Review notes:

 1.   throwing constructors aren't a very good idea in my book (move parsing to an 'action' function, not a ctor?)
 2.   rebuilding the rules each time a header is parsed is suboptimal
 3.   using a literal `" = "` likely doesn't do what you expect in the presence of a `qi::space_type` skipper
 4.   all the fuzz listing each and every include and ...NO_PREDEFINED_TERMINALS is probably not worth it (after all, how often will this tiny TU change? how often will it build?). I'd prefer keeping it simple, instead of forcefully dragging all implementation details above the covers.
 5.   use `attr(boost::none)` instead of the verbose and cryptic `attr(boost::optional<float>())`
 6.   A cursory glance at rfc2616 section 14.4 tells me you got the grammar slightly confused ("*; q=3.4" should be accepted too)
 7.   error handling/checking should be added
    *  now, `expectation_failures<>` are just propagated, is this intended?
    *  you could do without the `empty()` check by just making the list of entries optional
    *  the input "    " would erronously not be accepted