any P が <T: P> に implicit open されるときの挙動で、 もしインスタンスの型がクラス(C2)で、その P conformanceが親クラス (C1) で行われていた場合、 openする型はそのまま値の型 (C2) になる。open の実装は正しいように見えるが、この挙動のおかげで、 tとuにC1とC2を渡すと、tがC1のときは u as? C1 が成功するが、 tがC2のときは u as? C2 は失敗するので実行結果が変わる。C2 の P 準拠は C1 で行われているので、 C2.equals は 2つの C1 を受け取る関数になっていて、本来は C2 と C1 を渡す事ができる。(check で確認)C2 の P への準拠は、 Self = C1 としての準拠になっていると言えるので、 openする時の T は C1 として open されるほうが自然な気もするし、 実際の値のmetatypeがそのまま出てくる今の挙動のほうが自然な気もする。