1class virtual child1 parent = 2 object 3 method private parent = parent 4 end 5 6class virtual child2 = 7 object(_ : 'self) 8 constraint 'parent = < previous: 'self option; .. > 9 method private virtual parent: 'parent 10 end 11 12(* Worked in 4.03 *) 13let _ = 14 object(self) 15 method previous = None 16 method child = 17 object 18 inherit child1 self 19 inherit child2 20 end 21 end;; 22[%%expect{| 23class virtual child1 : 'a -> object method private parent : 'a end 24class virtual child2 : 25 object ('a) 26 method private virtual parent : < previous : 'a option; .. > 27 end 28- : < child : child2; previous : child2 option > = <obj> 29|}] 30 31(* Worked in 4.03 *) 32let _ = 33 object(self) 34 method previous = None 35 method child (_ : unit) = 36 object 37 inherit child1 self 38 inherit child2 39 end 40 end;; 41[%%expect{| 42- : < child : unit -> child2; previous : child2 option > = <obj> 43|}] 44 45(* Worked in 4.03 *) 46let _ = 47 object(self) 48 method previous = None 49 method child () = 50 object 51 inherit child1 self 52 inherit child2 53 end 54 end;; 55[%%expect{| 56- : < child : unit -> child2; previous : child2 option > = <obj> 57|}] 58 59(* Didn't work in 4.03 *) 60let _ = 61 object(self) 62 method previous = None 63 method child = 64 let o = 65 object 66 inherit child1 self 67 inherit child2 68 end 69 in o 70 end;; 71[%%expect{| 72Line _, characters 16-22: 73Error: The method parent has type < child : 'a; previous : 'b option > 74 but is expected to have type < previous : < .. > option; .. > 75 Self type cannot escape its class 76|}] 77