On Thursday, January 6, 2022 at 9:40:49 PM UTC+8 Brian Candler wrote:
> So to be more specific, I think you're asking why this code works: > https://gotipplay.golang.org/p/kuYzzx4EJY1 > > Sorry, I made a mistake in interpreting the spec. It also says: > > "The type set of the empty interface is the set of all types." > > Therefore, the type set of the intersection { int; any } is int - and > hence f[int] is allowed. > > But the set of specific types > <https://tip.golang.org/ref/spec#Structure_of_interfaces> is empty: > > "An interface specification which contains type elements > <https://tip.golang.org/ref/spec#Interface_types> defines a (possibly > empty) set of *specific types*. Loosely speaking, these are the > types T that appear in the interface definition in terms of the form T, ~T, > or in unions of such terms." > > The type set and the set of specific types can be different. Examples are > given where one is empty and the other is non-empty: > > interface{ int; m() } // *[specific type]* int (but type set is empty > because int has no method m) > interface{ int; any } // no specific types (intersection is empty) *[even > though the type set is not empty]* > > *Items in [italics/brackets] are my additions* > > The type set and the set of specific types can be different This is true. > interface{ int; any } // no specific types (intersection is empty) *[even though the type set is not empty]* I don't think this is true. In my opinion, the method set of specific types of interface{ int; any } are both {int}. -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/48b67caf-19ae-4ffe-af4d-436268187ef2n%40googlegroups.com.