discard """
  output: '''(c: hello, a: 10, b: 12.0)
(a: 15.5, b: hello)
(a: 11.75, b: 123)'''
"""

# bug #5231
# generic object inheriting from
# partial specialized generic object
type
  Curve1[T, X] = object of RootObj
    a: T
    b: X

  Curve2[T] = Curve1[T, float64]

  Curve3[T] = object of Curve2[T]
    c: string

  Curve4[T] = Curve1[float64, T]

  Curve5[T] = object of Curve4[T]

  Curve6[T] = object of T

var x: Curve3[int]
x.a = 10
x.b = 12.0
x.c = "hello"

echo x

var y: Curve5[string]
y.b = "hello"
y.a = 15.5

echo y

var z: Curve6[Curve4[int]]
z.a = 11.75
z.b = 123

echo z