<div dir="ltr"><div>Hello community! I&#39; wondering if somebody can explain this to me.</div><div>Please take look at the snippet.</div><div><br></div><div>protocol P {}</div><div>struct X:P {}</div><div><br></div><div>func foo&lt;A:P&gt;(_ x:A) {}</div><div><br></div><div>func bar() {</div><div>    //let x = X() // this compiles</div><div>    let x = X() as P // this does not compile. Why?</div><div>    foo(x)</div><div>}</div><div><br>I expect the both cases to work though. But only first works? And I do not understand why.<br>My coworkers said that it is a compiler bug, but I&#39;m not shure it is.<br>Thanks for the help.</div></div>