```
foo();

(*foo)();

(&foo)();

```

What exactly is the difference between these function calls (assuming `foo()` is defined somewhere)? and are there any situations where one might be used over another?

Also, why don't `&foo()` and `*foo()` work?