I think this is a side-effect of the new function pointer fixes, where you now can't implicitly convert an extern(C) function to an extern(D) function by accident (and that's a good thing). But the problem is, you can't define a function with a different linkage type inline as a type parameter. You have to use an alias instead:
extern (C) int puts(const char* s); alias extern(C) int function(const char*) FunPtr; class X { @property void tt(FunPtr xz) { } } void main() { X x = new X(); x.tt = &puts; } (sorry for reindenting, my script does that :p)