ct {
	y int "foo"
	x bool
}

// S1 is an alias of an unnamed type.
type S1 = struct {
	x int "foo"
	y bool
}

// S2 is also an alias of an unnamed type.
type S2 = struct {
	x int "bar"
	y bool
}

// If field tags are ignored, the underlying
// types of S3(S4) and S1 are same. If field
// tags are considered, the underlying types
// of S3(S4) and S1 are different.
type S3 S2 // S3 is a defined (so named) type
type S4 S3 // S4 is a defined (so named) type

var v0, v1, v2, v3, v4 = S0{}, S1{}, S2{}, S3{}, S4{}