And this fails to compile, although the docs says it is valid:

    // sliceOrMap is a type constraint for a slice or a map.
    type sliceOrMap interface {
        []int | map[int]int
    }

    // Entry returns the i'th entry in a slice or the value of a map
    // at key i. This is valid as the result of the operator is always int.
    func Entry[T sliceOrMap](c T, i int) int {
        // This is either a slice index operation or a map key lookup.
        // Either way, the index and result types are type int.
        return c[i] // invalid operation: cannot index c (variable of type 
T constrained by sliceOrMap
    }


On Saturday, November 13, 2021 at 1:10:30 AM UTC+8 tapi...@gmail.com wrote:

> The proposal design docs (
> https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md)
>  
> mentions:
>
>     // structField is a type constraint whose type set consists of some
>     // struct types that all have a field named x.
>     type structField interface {
>         struct { a int; x int } |
>             struct { b int; x float64 } |
>             struct { c int; x uint64 }
>     }
>
>     // This function is INVALID.
>     func IncrementX[T structField](p *T) {
>         v := p.x // INVALID: type of p.x is not the same for all types in 
> set
>         v++
>         p.x = v
>     }
>
> However, it still fails to compile if all the types of the x fields are 
> identical.
>
>     type structField interface {
>         struct { a int; x int } |
>             struct { b int; x int } |
>             struct { c int; x int }
>     }
>
>     func IncrementX[T structField](p *T) {
>         v := p.x // p.x undefined (type *T has no field or method x)
>         v++
>         p.x = v  // p.x undefined (type *T has no field or method x)
>     }
>
>
>
>

-- 
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/7f2e88e1-5a50-4aae-9e72-94d6b43f5f16n%40googlegroups.com.

Reply via email to