I have conducted the following inference tests:
static class InferenceTest {
static void TakeInt(int a) { }
static int GiveInt() { return 0; }
static
Method parameters are not inspected.
As suggested, in ConsumeFunc1Func2 the compiler is inferring only from return values. In ConsumeFunc2c, TakeAndGiveInt signature is not inspected to see if its method parameter type is actually of the same type of the method return type cause... method parameters are not inspected!