D2 code, compiled with dmd 2.047: import std.stdio; void main() { string a(); writeln(typeid(typeof(a))); string function() b; writeln(typeid(typeof(b))); } By the way, what's the point in allowing/keeping ugly and error-prone function literals in D2? It's better for D2 to keep/allow only _one_ standard, clean and readable syntax for functions pointers (and one for delegates, if necessary). Keeping C function pointer syntax or something similar in D2 causes troubles.
Closed because Brad Roberts has correctly noted this is a bug report and an enchantment request in one.