Hi,
How is the intended way for passing a reference to a function?
In my opinion, the firs call to bar, resp. println! is the correct one, since it is already a reference. But why are both "variants" possible (since the second call would pass a &&str)? Does the compiler optimizes that?
The second case is talking advantage of deref coercion -- the &&str will be dereferenced to &str to make the actual call. This is more useful when the underlying type changes through Deref, like using &String for a &str argument.
Note that println is not a function but a macro, and you can't expect things to work the same with them. For example you can pass a String to println by value, you can still use it afterwards because the macro inserts some sort of borrow for you.