This one compiles okay: func Bar2[T any](x T) T { { var T = x // T redeclared in this block return T } }
So the parameter type is declared at the local top block? On Fri, Nov 12, 2021 at 9:43 PM T L <tapir....@gmail.com> wrote: > It is strange that my recent comments are deleted automatically if they > are posted from the web interface. > But now from the email interface. > > On Fri, Nov 12, 2021 at 9:40 PM T L <tapir....@gmail.com> wrote: > >> Are the followings also intended? >> >> func Foo[T any](T T) T { // (the 2nd) T redeclared in this block >> return T // T (type) is not an expression >> } >> >> func Bar[T any](x T) T { >> var T = x // T redeclared in this block >> return T >> } >> >> On Fri, Nov 12, 2021 at 6:03 PM Axel Wagner < >> axel.wagner...@googlemail.com> wrote: >> >>> >>> >>> On Fri, Nov 12, 2021 at 10:54 AM tapi...@gmail.com <tapir....@gmail.com> >>> wrote: >>> >>>> >>>> >>>> On Friday, November 12, 2021 at 5:33:19 PM UTC+8 >>>> axel.wa...@googlemail.com wrote: >>>> >>>>> I suspect this issue is hard/impossible to avoid, because it must be >>>>> possible to self- and mutually reference type-parameters, in a way that >>>>> it's not for normal parameters, to allow to write something like >>>>> >>>>> type Equaler[T any] interface { >>>>> Equal(T) bool >>>>> } >>>>> func Eq[T Equaler[T]](a, b T) bool { >>>>> return a.Equal(b) >>>>> } >>>>> >>>> >>>> I don't see the same problem here. "T" and "Equaler" are two different >>>> identifiers. >>>> >>> >>> But T and T are not. >>> >>> The point I was making is that type-parameters must inherently be scoped >>> in a way that makes them visible in the type-list itself, to make writing >>> code like this possible. This isn't necessary for regular parameters and >>> it's what makes type-parameter lists special. >>> >>> I *also* said that it's probably possible to devise rules which would >>> make this possible, while allowing the example you wrote, just that those >>> rules would have to be complicated. >>> >>> >>>> >>>> >>>>> >>>>> or basically any use-case for constraint-type inference. >>>>> >>>>> Even if we *could* allow it consistently, the rules for doing that >>>>> would likely be pretty complex. Better to take the relatively minor hit of >>>>> disallowing this overloading (you can always use different names for the >>>>> type-parameters, if they conflict with the constraint you want to use) >>>>> than >>>>> to take the hit of complex scoping rules with lots of exceptions. >>>>> >>>>> On Fri, Nov 12, 2021 at 9:48 AM tapi...@gmail.com <tapi...@gmail.com> >>>>> wrote: >>>>> >>>>>> I expect the following code compilers okay, but it doesn't. >>>>>> It looks All the three "I" in the Bar function declaration are >>>>>> viewed as the type parameter, whereas the second one is >>>>>> expected as the constraint I (at least by me). >>>>>> >>>>>> package main >>>>>> >>>>>> type I interface { M() } >>>>>> >>>>>> func Foo(i I) { >>>>>> i.M() >>>>>> } >>>>>> >>>>>> func Bar[I I](i I) { // cannot use a type parameter as constraint >>>>>> i.M() >>>>>> } >>>>>> >>>>>> func main() {} >>>>>> >>>>>> -- >>>>>> 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...@googlegroups.com. >>>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/golang-nuts/9fc66e8e-3f99-4c3a-87f7-ce7c1a705cdcn%40googlegroups.com >>>>>> <https://groups.google.com/d/msgid/golang-nuts/9fc66e8e-3f99-4c3a-87f7-ce7c1a705cdcn%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> -- >>>> 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/a4ffdc09-02cf-47af-96fc-3ebde3fc5d10n%40googlegroups.com >>>> <https://groups.google.com/d/msgid/golang-nuts/a4ffdc09-02cf-47af-96fc-3ebde3fc5d10n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- 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/CAHbs%3DNZVnhK2fV2R2NbtXvfsyV%3DfP1ToD0SoSBhf9%3Dr0d19gPg%40mail.gmail.com.