Для обеспечения совместимости C++ кода, разработанного для современных систем, с компиляторами 90-х годов, необходимо внести ряд изменений. Проблемы возникают из-за отсутствия поддержки некоторых современных фич C++, таких как

Для решения этих проблем,
Также отключается использование новых фич компилятора, таких как intrinsics, и отключаются многопоточность и SIMD в библиотеке stb_image. После этих правок код успешно компилируется на Visual C++ 4.0, а также на версиях 5.0 и 6.0.
Проведенные эксперименты демонстрируют, что даже на древних компиляторах можно использовать самописный STL и namespace, обеспечивая при этом совместимость с новыми компиляторами. Вся несовместимость обернута в дефайны с проверкой версии.
typename в объявлениях шаблонов, а также стандартных заголовков <string> и <stdint.h>. 
Изображение носит иллюстративный характер
Для решения этих проблем,
typename заменяется на class в объявлениях шаблонов. Отсутствующие заголовки <stdint.h> и <string> заменяются самописными эквивалентами. Тип bool также необходимо переопределить через define BOOL, TRUE, FALSE, так как прямое использование typedef enum { false, true } bool; не работает. Также отключается использование новых фич компилятора, таких как intrinsics, и отключаются многопоточность и SIMD в библиотеке stb_image. После этих правок код успешно компилируется на Visual C++ 4.0, а также на версиях 5.0 и 6.0.
Проведенные эксперименты демонстрируют, что даже на древних компиляторах можно использовать самописный STL и namespace, обеспечивая при этом совместимость с новыми компиляторами. Вся несовместимость обернута в дефайны с проверкой версии.