I think the "cleaner" solution to supporting multiple different event packet decoding is to do what I did here:
#345 (comment)
The goal here is to limit the amount of duplicated code to avoid copying bugs around by just creating std::unique_ptr<DAQRunConsumer> and then passing around pointers/references to that created Consumer rather than having to template over functions.
This does not address the issue/annoyance of having constexpr ... is_same floating around within the DecodeAnd* calls, but I'll keep thinking about that...