title: Generic Type Casting compile check error
body: <p>Here is my code</p>
  
  <pre><code>func testFuncA&lt;T&gt;(_ value: T) {
      if let rValue = value as? Encodable {
          testFuncB(rValue)//error in here: Cannot invoke 'testFuncB' with an argument list of type '(Encodable)'
      }
  }
  
  func testFuncB&lt;T: Encodable&gt;(_ value: T)  {
  
  }
  </code></pre>
  
  <p>why can not invoke<code>testFuncB</code>? is <code>T</code> can cast to <code>T: Encodable</code> ?</p>