Одна вещь, которую следует помнить о стандартных включаемых файлах, это то, что они разрешены, но не обязаны вызывать друг друга. (Это не значит, что они потенциально загрязняют пространство имен этим, поскольку все они используют пространство имен std, с которым вы не должны связываться.)
Возможно, что в MSVC ++ он включает или наоборот, но в заголовках g ++ это не так. Поэтому программа может компилироваться в MSVC ++, а не в g ++, при этом в исходном коде отсутствует обязательный заголовок.
Убедитесь, что все необходимые заголовки действительно включены, и с вами все будет в порядке.