dg is a delegate and must return a value of the same type as it self. What should "some_type" be to make this work? some_type delegate() dg; /*********/ while( (dg = dg()) !is null){} (in case you are wondering this would act as a finite state machine)