Иногда из плюсов в раст, но эту проблему я объехал созданием маленького переходника и возвращаю обёртку в раст по ссылке (но это сам понимаешь — не 100% решение, потому что никто не гарантирует, что плюсовая строка будет жить достаточно долго).
Но в большинстве своём из раста в плюсы.
В 100% случаев люди, когда сталкиваются с передачей std::string по значению, просто переводят в char * и передают указатель. Ну для меня это компромиссное и нелучшее решение.
Так что я думаю, возможно ли теоретически написать такую обёртку над std::string, чтобы передавать владение и в Расте тоже. Теоретически ты уже описал пространство возможностей, понятно, что будет поддерживаться только msvc/gcc и шланг, причём нужно будет поддерживать матрицу версий (версия компилятора и версия std), ясно, что это стрёмная задача. Но зато офигенно нужная.