title: How to call a method when a trait and struct use the same method name?
body: <p>This program dies because of infinite recursion:</p>
  
  <pre><code>use std::any::Any;
  
  trait Foo {
      fn get(&amp;self, index: usize) -&gt; Option&lt;&amp;Any&gt;;
  }
  
  impl Foo for Vec&lt;i32&gt; {
      fn get(&amp;self, index: usize) -&gt; Option&lt;&amp;Any&gt; {
          Vec::get(self, index).map(|v| v as &amp;Any)
      }
  }
  
  fn main() {
      let v: Vec&lt;i32&gt; = vec![1, 2, 4];
      println!("Results: {:?}", v.get(0))
  }
  </code></pre>
  
  <p>The compiler itself warns about this:</p>
  
  <pre class="lang-none prettyprint-override"><code>warning: function cannot return without recurring
    --&gt; src/main.rs:8:5
     |
  8  |       fn get(&amp;self, index: usize) -&gt; Option&lt;&amp;Any&gt; {
     |  _____^ starting here...
  9  | |         Vec::get(self, index).map(|v| v as &amp;Any)
  10 | |     }
     | |_____^ ...ending here
     |
     = note: #[warn(unconditional_recursion)] on by default
  note: recursive call site
    --&gt; src/main.rs:9:9
     |
  9  |         Vec::get(self, index).map(|v| v as &amp;Any)
     |         ^^^^^^^^^^^^^^^^^^^^^
     = help: a `loop` may express intention better if this is on purpose
  </code></pre>
  
  <p>Why does universal call syntax not work in this case? The compiler does not understand that I want to call <code>Vec::get</code> not <code>Foo::get</code>.</p>
  
  <p>How can I fix this, if I do not want to change function names?</p>