(a | b | ...) % lit(',')
boost::variant<a,b,..>
NOTE: In general many Boost.Spirit gotchas can be fixed by simplifying rules (better control what gets synthesied under the bonet)