title: Why can't I declare a trait function with tuple parameter matching?
body: <p>Why is it that I cannot declare a trait function with tuple parameter matching?</p>
  
  <pre><code>#![allow(unused)]
  
  // This works
  fn foo((x, y): (i32, i32)) {
  }
  
  trait Bar {
      // This does not work
      fn bar((x, y): (i32, i32));
  }
  </code></pre>
  
  <p><a href="https://play.rust-lang.org/?gist=ce092e0146354cbbf09319117a706761&amp;version=stable&amp;mode=debug&amp;edition=2015" rel="nofollow noreferrer">Playground</a></p>
  
  <p>Compiling the above outputs this:</p>
  
  <pre class="lang-none prettyprint-override"><code>error: expected one of `)` or `,`, found `:`
   --&gt; src/main.rs:7:18
    |
  7 |     fn bar((x, y): (i32, i32));
    |                  ^ expected one of `)` or `,` here
  
  error: expected one of `!`, `&amp;&amp;`, `&amp;`, `(`, `)`, `*`, `&lt;`, `?`, `[`, `_`, `dyn`, `extern`, `fn`, `for`, `impl`, `unsafe`, or lifetime, found `:`
   --&gt; src/main.rs:7:18
    |
  7 |     fn bar((x, y): (i32, i32));
    |                  ^ expected one of 17 possible tokens here
  
  error[E0601]: `main` function not found in crate `playground`
    |
    = note: consider adding a `main` function to `src/main.rs`
  </code></pre>