Done with one small change: I've used a static assert instead of post-signature-if to verify that T1 and T2 have a common type, because it allows me to write a meaningful compilation error.