Допустим, есть некоторый протокол, для которого определены структуры данных. Раньше можно было описать их на Си, затем подключать полученный заголовочный файл, куда нужно — хочешь, генерируй обёртки для Java, хочешь — для Python, а можешь сразу в С++ использовать. Сейчас же Си и С++ довольно далеко разошлись. Настолько, что простой union из нескольких полей и равного по размеру массива (типичное представление вектора в Си) может привести к UB. И что делать? То ли сразу на С++ писать (std::variant вместо union, std::array вместо []), теряя возможность легко и непринуждённо генерировать bindings в другие языки, то ли оставаться на сях, снова и снова привнося ложечку дряхлости в современный в остальных аспектах код на С++
P.S. Я знаю про swig, но он слишком тяжёлый для моих целей, да и код генерирует многословный.