go/test/typeparam/aliasimp.dir/main.go
Robert Griesemer 68152359fd cmd/compile/internal/types2: disallow aliases for generic types
The existing approach (alias name stands for generic type name)
is an exception: it's the only place where a generic type could
be used without explicit instantiation. The correct solution is
currently under discussion (see proposal issue #46477).

This CL requires that the RHS of an alias type declaration be
an instantiated non-generic type. If #46477 is accepted, the
implementation will require proper representation of alias
types.

Change-Id: Ie85b923213a64f39837e56e38e14757458272b93
Reviewed-on: https://go-review.googlesource.com/c/go/+/346294
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
2021-08-31 16:43:46 +00:00

42 lines
707 B
Go

// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import "a"
type R[T any] struct {
F T
}
// type S = R // disallowed for now
type Sint = R[int]
// type Simp = a.Rimp // disallowed for now
// type SimpString Simp[string] // disallowed for now
type SimpString a.Rimp[string]
func main() {
// var s S[int] // disallowed for now
var s R[int]
if s.F != 0 {
panic(s.F)
}
var s2 Sint
if s2.F != 0 {
panic(s2.F)
}
// var s3 Simp[string] // disallowed for now
var s3 a.Rimp[string]
if s3.F != "" {
panic(s3.F)
}
var s4 SimpString
if s4.F != "" {
panic(s4.F)
}
}