On Tue, 4 Apr 2017 07:27:17 -0700 Ian Lance Taylor <i...@golang.org> wrote:
> >> When you insert a value keyed by S{}, the compiler creates a value > >> of type I which has S as its dynamic type and S{} as its value. > >> > >> The program as speficied panics with > > > > > > Apologies if it wasn't clear from my original email, but I > > understand why this panics; I further acknowledge the behaviour is > > consistent with the spec. > > > > My question is why something that could be caught at compile time > > is not caught at compile time: > > I suspect mostly because nobody thought of it. > > That said, note that this in effect a language change. It is possible > to construct a program that currently works into a program that after > this change is made will fail to compile. So while we could make this > change, it would have to be done by changing the language spec. I > don't know whether it is worth doing; is it a common problem? IMO implementing such a compile check would be contrary to the "least WTF" principle. Imagine something like type S struct { f func() } func (s S) Impl() {} func Foo() I { return S{} } m[Foo()] = true The compiler is able to check at compile time that Foo always returns values of the dynamic type S but that would unnecessary complicate the analysis. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.