Что тогда делают? Есть три варианта.
1. Перейти на кроссплатформенную библиотеку (Qt, например).
2. Наладить свою небольшую библиотеку, которая когда-нибудь станет кроссплатформенной.
3. Наладить механизм псевдонимов.
Эти варианты можно объединять: что-то перевести на другую библиотеку, что-то написать своё.
Примеры из личного кода.
ОДИН. Ну, например, собственные механизмы работы с путями к файлам потихоньку уходят в сторону std::filesystem::path.
ДВА. Ну, допустим, сделал свою библиотеку доступа к файлам — бонуса три. 1) Есть функции вроде writeIW (Intel word). 2) Проще писать свои абстрактные потоки, чем с std. 3) Феноменальная скорость под Windows (использует нечастый, но быстрый overlapped API с двойной буферизацией). На остальных ОС — обычная обёртка над FILE*.
ТРИ. std::random_device из MinGW 9 давал детерминированную последовательность. Потом попытался бросить эту обходную ветку, но кто-то из программистов пожаловался — на его машине r_d просто не инициализировался.
#if defined(__MINGW32__) && defined(__GNUC__) && !defined(__clang__)
#define MINGW_RANDOM_DEVICE_WORKAROUND
class MingwRandomDevice {}; // куча WinApi, опустим
#else //defined(__MINGW32__) && defined(__GNUC__) && !defined(__clang__)
#include <random>
using MingwRandomDevice = std::random_device;
#endif //defined(__MINGW32__) && defined(__GNUC__) && !defined(__clang__)