Avatar
omochimetaru 7/12/2017 3:15 AM
Swiftの方は制約の無い struct A < T> を想定して考えていました。
3:16 AM
でも制約もオーバーロードされてなければ最後にチェックするだけだと思うんで
3:16 AM
あまり関係ない気がしますね
3:17 AM
つまり僕がいいたいのは
3:17 AM
Swiftの推論機がジェネリックな型パラメータを解決する部分は
3:17 AM
普通に左辺値の推論をするのと
3:17 AM
同程度の難易度のタスクだから
3:18 AM
そこができるからすごい、というふうには感じない、ということです
3:18 AM
C++の例は、型パラメータを解決する部分と左辺値推論が似ていることの補強のひとつです
3:19 AM
制約が満たされるかどうかの決定方法は C++ が Structural subtyping的で、Swiftが宣言的なのはそうだけど
3:19 AM
そこは推論フェーズには関係ないと思う。
3:19 AM
オーバーロードしたところで推論の道筋が分岐→1つのオーバーロードを仮定して推論を全部埋める→埋まったあとで、制約が満たされているかをチェックする→満たされていなければ次のオーバーロードを試す
3:20 AM
多分こういう挙動。で、制約が満たされているかをチェックする部分が、structural か、宣言的かは、「ジェネリックな型が推論に統合されている」話とは、別のフェーズで、どっちでもいい。