静的ではなくて動的ディスパッチだろ
このように次々と何が来るかわからないリストが渡ってきた場合

Shape::Shape shape_list[4];
shape_list[0] = Shape::Rectangle{w: 33, h: 33};
shape_list[1] = Shape::Parallelogram{ui0: 4, ui1: 33};
shape_list[2] = Shape::Rectangle{w: 33, h: 4};
shape_list[3] = Shape::Circle{10};

その時にこれで処理できるのだから動的ディスパッチをしている

for (int i = 0; i < 4; i++) {
enum_pattern(shape_list[i]);
}