Этот стандарт кодирования C ++ уже запрещает вам передавать типы нестандартной компоновки через границы выполнения, и std::string
является таким типом. Часть исключения не усугубляет проблему.
Как правило, разумное решение состоит в том, чтобы не иметь «границ выполнения» в вашей программе. Вместо этого вы компилируете всю программу, используя один ABI и одну стандартную библиотеку.
Если у вас есть механизм плагинов, вы обычно создаете узкий API для этого интерфейса плагинов. В этом интерфейсе вы можете даже придерживаться C ABI, поэтому автор плагина не ограничен C ++. И поскольку это C ABI, вы должны убедиться, что ваши исключения C ++ не передаются плагину. std::string
здесь не проблема, вы работаете с char const*
.