“When you add Bilinear to the type, the warning changes from "catches: BSpline" to "catches: BSpline, Bilinear." You notice.”
Do you really notice that? To do that, you have to diff the warnings from a build with the warning of the earlier build.
Isn’t it more robust to not use _ at all and get compilation errors when adding a new type of shape?