When there are default protocol implementation, constrained protocol extension implementation, type implementation, constrained type extension implementation, of an API, which one is actually called is very confusing and some current behaviors are quite odd.
1. The definite dispatching rules should specified and documented.
2. Some of current behaviors are bugs — though I'm not sure which because I'm not sure about the dispatching rules — and should fixed.
Commented code with execution results should explain the issues more clearly:
The actual output:
The expected output: