struct A {
	public int a_int;
	public void a_func () { stdout.printf ("a ()\n"); }
}

struct B : A {
	public char b_char;
	public string b_func () { return "A.a_int = %d".printf (a_int); }
}

struct C : B {
	public string c_string;
	public void c_func () { a_func (); }
}

void main () {
	var c = C ();
	c.c_string = "foo";
	c.b_char = 'C';
	c.a_int = 3;
	c.a_func ();
	stdout.printf ("%s\n", c.b_func ());
	c.c_func ();

	var a = A ();
	a.a_func ();
	a.a_int = 42;
}
