diff options
author | Robert Griesemer <gri@golang.org> | 2022-12-13 17:41:19 -0800 |
---|---|---|
committer | Robert Griesemer <gri@google.com> | 2022-12-14 19:13:24 +0000 |
commit | 5c682f94c6b465f75b3e638ecff77adaf87aabb2 (patch) | |
tree | 90fdf887db31a52772eaa0e0e7a24c40b6ecf09d /doc/go_spec.html | |
parent | bd42aa86d32f1c29859151520647175e07f3fbca (diff) | |
download | go-5c682f94c6b465f75b3e638ecff77adaf87aabb2.tar.gz go-5c682f94c6b465f75b3e638ecff77adaf87aabb2.zip |
spec: document illegal recursive type parameter lists
Fixes #40882.
Change-Id: I90f99d75e6d66f857b6ab8789c6d436f85d20993
Reviewed-on: https://go-review.googlesource.com/c/go/+/457515
TryBot-Bypass: Robert Griesemer <gri@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Diffstat (limited to 'doc/go_spec.html')
-rw-r--r-- | doc/go_spec.html | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/doc/go_spec.html b/doc/go_spec.html index 2cf53c8a97..237176f4a7 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -2644,10 +2644,21 @@ of a <a href="#Method_declarations">method declaration</a> associated with a generic type. </p> -<!-- -This section needs to explain if and what kind of cycles are permitted -using type parameters in a type parameter list. ---> +<p> +Within a type parameter list of a generic type <code>T</code>, a type constraint +may not (directly, or indirectly through the type parameter list of another +generic type) refer to <code>T</code>. +</p> + +<pre> +type T1[P T1[P]] … // illegal: T1 refers to itself +type T2[P interface{ T2[int] }] … // illegal: T2 refers to itself +type T3[P interface{ m(T3[int])}] … // illegal: T3 refers to itself +type T4[P T5[P]] … // illegal: T4 refers to T5 and +type T5[P T4[P]] … // T5 refers to T4 + +type T6[P int] struct{ f *T6[P] } // ok: reference to T6 is not in type parameter list +</pre> <h4 id="Type_constraints">Type constraints</h4> |