title: Swift function with a parameter which conforms to a protocol
body: <p>I want to write a function with a parameter which conforms to a protocol. There are 2 options:</p>
  
  <pre><code>// option 1:
  func foo&lt;T: CustomStringConvertible&gt;(obj: T) {
      print(1)
      print(obj.description)
  }
  // option 2:
  func foo(obj: CustomStringConvertible) {
      print(2)
      print(obj.description)
  }
  // test:
  foo(Float(10.0))
  </code></pre>
  
  <p>Both of them work as expected, and the 2nd will override the 1st if they coexist.</p>
  
  <p>Does the compiler generate the same binary?</p>