В С++ можно бросить исключение любого типа, хоть int:
throw 100;
Но в различных языках, которые были разработаны позже, практически везде можно бросать только исключения специальных типов (как правило, некоторого базового типа исключения и унаследованных от него).
Конечно, это удобнее, но... существуют ли теоретически такие ситуации, когда целесообразно бросить именно исключение любого, _произвольного_ типа , а не только специально унаследованного ?
И почему в С++ сделали возможность бросать исключение любого типа? Просто не подумали, или были какие-то другие причины?