Right now, if I try to call a trait method defined on a function pointer using a function item as a receiver, the compiler complains that the function item type doesn't implement the trait. This doesn't seem like useful behavior, since the programmer can't implement traits on function items. I think that if the function item doesn't implement the trait, it should be coerced to a function pointer.
- AFAICT implementations on function pointers is the only way to define a trait on several function types, since blanket implementations with Fn bounds conflict with each other.
- I can see the value of being able to .clone() a function item and get a zero sized result, so the coercion shouldn't happen in all cases.
- The dot operator already "performs a lot of magic" so this is in line with existing design choices.