Проблема в том, что простой каст на B* не работает из-за расположения объектов в памяти. С-cast об этом ничего не знает. Надо делать static_ или dynamic_cast. Можно обойтись cast-om на B*... однако не работает ибо A* к B* не приводится. Поэтому надо сделать следующее:
B* b = static_cast<C1*>(*it);
Хотя тоже не элегантно, но работать уже будет.
И вот вы видите — все недостатки множественного наследования.