This is a question regarding how Multiple Dispatch works. 

Suppose that we have a type hierarchy like this:

```
Drawable -> Shape -> Polygon -> Rectangle

```

And there are three functions (This is a pseudo-code):

```
void func(Rectangle*, Drawable*, Drawable*) ...
void func(Rectangle*, Rectangle*, Drawable*) ...
void func(Polygon*, Rectangle*, Rectangle*) ...

```

And suppose that this is a piece of code:

```
Drawable* x = create_rectangle();
Drawable* y = create_rectangle();
Drawable* z = create_rectangle();

```

Obviously types of `x,y,z` are all `Drawable` but they contain instances of a `Rectangle`. Which function will be called if I write: `func(x, y, z)`?

We don't have any function which matches exact types of `x, y and z` so what happens in this case?