Ideally we'd just do this when we need it, but the ostream derivation will be controlled by both global config and per-structure config, so it's hard to know exactly when we need it and when we don't.
There are two situations where we can legitimately end up with a different number of template params. Fixes #532. Fixes #527.