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/CAEkBMfGfo42fR7_JONduVEPX6yA5-A7-beMutne6hWoLLFK_2g%40mail.gmail.com.

Reply via email to