Nope, i specifically made this example because D makes no
difference
between two or more functions with different return types.
Are you talking about co-variance? Could you please explain what
you mean when you say D does not distinguish between return types
(possibly by pointing to contexts in which this happens)? If yes
then I think this a different case all together. In this case it
seems picking the right function is doable, co-variance
notwithstanding. Note I am not saying this can be done without
making any changes to the compiler/language but whatever changes
are required IMO will be small.