| // Copyright 2022 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 p |
| |
| // simplified test case |
| |
| type transform[T any] struct{} |
| type pair[S any] struct {} |
| |
| var _ transform[step] |
| |
| type box transform[step] |
| type step = pair[box] |
| |
| // test case from issue |
| |
| type Transform[T any] struct{ hold T } |
| type Pair[S, T any] struct { |
| First S |
| Second T |
| } |
| |
| var first Transform[Step] |
| |
| // This line doesn't use the Step alias, and it compiles fine if you uncomment it. |
| var second Transform[Pair[Box, interface{}]] |
| |
| type Box *Transform[Step] |
| |
| // This line is the same as the `first` line, but it comes after the Box declaration and |
| // does not break the compile. |
| var third Transform[Step] |
| |
| type Step = Pair[Box, interface{}] |
| |
| // This line also does not break the compile |
| var fourth Transform[Step] |