| During a method call, a value is automatically dereferenced as many times as | |
| needed to make the value's type match the method's receiver. The catch is that | |
| the compiler will only attempt to dereference a number of times up to the | |
| recursion limit (which can be set via the `recursion_limit` attribute). | |
| For a somewhat artificial example: | |
| ```compile_fail,E0055 | |
| #![recursion_limit="4"] | |
| struct Foo; | |
| impl Foo { | |
| fn foo(&self) {} | |
| } | |
| fn main() { | |
| let foo = Foo; | |
| let ref_foo = &&&&&Foo; | |
| // error, reached the recursion limit while auto-dereferencing `&&&&&Foo` | |
| ref_foo.foo(); | |
| } | |
| ``` | |
| One fix may be to increase the recursion limit. Note that it is possible to | |
| create an infinite recursion of dereferencing, in which case the only fix is to | |
| somehow break the recursion. |