static F0 f0(fO f) { if (f cast F0) ret f; if (f cast S) { ifndef callF_legacy fail("callF_legacy"); endifndef ifdef callF_legacy ret mainFunctionToF0((S) f); endifdef } if (f cast IF0) ret if0ToF0(f); ret new F0 { O get() { ret callF(f); } }; }