Oh, sorry, I just re-read. Your example still requires `range` to return distinct types, so that probably shouldn't work.
On Fri, Nov 12, 2021 at 4:52 PM Axel Wagner <axel.wagner...@googlemail.com> wrote: > The error message gives you a reason - there is no single underlying type. > This works: > > type B []byte > func Bar[T []byte|B](s T) { > for range s {} > } > > But yes, your example arguably should be made to work eventually. I would > suggest filing an issue about that. > > On Fri, Nov 12, 2021 at 4:47 PM tapi...@gmail.com <tapir....@gmail.com> > wrote: > >> This one doesn't compile either. >> So the range operation doesn't support values of parameter types? >> >> type MyByte byte >> >> func Bar[T []byte|[]MyByte](s T) { >> for range s {} // cannot range over s (variable of type T constrained >> by []byte|[]MyByte) (type set has no single underlying >> } >> >> On Friday, November 12, 2021 at 11:40:53 PM UTC+8 >> axel.wa...@googlemail.com wrote: >> >>> On Fri, Nov 12, 2021 at 4:29 PM tapi...@gmail.com <tapi...@gmail.com> >>> wrote: >>> >>>> On Friday, November 12, 2021 at 11:10:17 PM UTC+8 >>>> axel.wa...@googlemail.com wrote: >>>> >>>>> `range s` works differently for string and []byte. In the former case >>>>> it iterates over utf8-encoded unicode codepoints, in the latter it >>>>> iterates >>>>> over bytes. >>>>> >>>> >>>> It is true, but why it matters here? >>>> >>> >>> Because it makes `range` different operations for the purposes of >>> determining the allowed operations on a type-parameter. >>> >>> >>>> >>>> >>>>> >>>>> On Fri, Nov 12, 2021 at 3:18 PM tapi...@gmail.com <tapi...@gmail.com> >>>>> wrote: >>>>> >>>>>> >>>>>> func Bar[T []byte|string](s T) bool { >>>>>> for _, v := range s { // cannot range over s (variable of type T >>>>>> constrained by []byte|string) (T has no structural type) >>>>>> if v > 100 { >>>>>> return true >>>>>> } >>>>>> } >>>>>> return false >>>>>> } >>>>>> >>>>>> The message is quite confusing. >>>>>> >>>>>> -- >>>>>> 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/44b5f535-adc8-4049-ba41-638f90becc3cn%40googlegroups.com >>>>>> <https://groups.google.com/d/msgid/golang-nuts/44b5f535-adc8-4049-ba41-638f90becc3cn%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...@googlegroups.com. >>>> >>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/golang-nuts/abd83194-8198-40e8-ad12-82953f85fba5n%40googlegroups.com >>>> <https://groups.google.com/d/msgid/golang-nuts/abd83194-8198-40e8-ad12-82953f85fba5n%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/42054eee-a9df-40d1-b148-4e5ead89ee0cn%40googlegroups.com >> <https://groups.google.com/d/msgid/golang-nuts/42054eee-a9df-40d1-b148-4e5ead89ee0cn%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/CAEkBMfF-N7%3DApH7bt8WfFeQ99rL8wh%3D0PP1YL4rWVsGk7_TQJQ%40mail.gmail.com.