`windows_shim.h` header breaks C++ standard streams headers

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Unresolved
    • Priority: Major - P3
    • None
    • Affects Version/s: None
    • Component/s: Build, Test Catch2
    • None

      The header file test/windows/windows_shim.h breaks standard C++ stream headers like <istream>, <ostream>, etc.

      The header defines macros:

      • #define read(fd, buffer, count) _read(fd, buffer, (unsigned int)(count))
      • #define write(fd, buffer, count) _write(fd, buffer, (unsigned int)(count))

      The above macro names pollute global namespace and collide with standard names used in C++ headers.

      If test/windows/windows_shim.h is included before any standard C++ stream header, then the build may break with strange errors. For example:

      [2026/01/02 13:16:29.123] FAILED: [code=2] test/catch2/CMakeFiles/catch2-unittests.dir/misc_tests/test_disagg_meta_config.cpp.obj
      [2026/01/02 13:16:29.123] C:\PROGRA~1\MICROS~1\2026\PROFES~1\VC\Tools\MSVC\1450~1.357\bin\Hostx64\x64\cl.exe  /nologo /TP -DKEY_PROVIDER_EXTENSION=\"C:/data/mci/631a/wiredtiger/cmake_build/ext/test/key_provider/wiredtiger_key_provider.dll\" -IC:\data\mci\631a\wiredtiger\src\include -IC:\data\mci\631a\wiredtiger\test\utility -IC:\data\mci\631a\wiredtiger\cmake_build\config -IC:\data\mci\631a\wiredtiger\test\catch2 -IC:\data\mci\631a\wiredtiger -IC:\data\mci\631a\wiredtiger\test\windows -IC:\data\mci\631a\wiredtiger\cmake_build\include -IC:\data\mci\631a\wiredtiger\cmake_build\_deps\catch2-src\single_include /DWIN32 /D_WINDOWS /EHsc /Zi /Ob0 /Od /RTC1 /Od -std:c++17 -MT /GF /EHsc /Gy /Zc:wchar_t /Gd /wd4996 /wd4090 /WX /we4100 /GS /showIncludes /Fotest\catch2\CMakeFiles\catch2-unittests.dir\misc_tests\test_disagg_meta_config.cpp.obj /Fdtest\catch2\CMakeFiles\catch2-unittests.dir\ /FS -c C:\data\mci\631a\wiredtiger\test\catch2\misc_tests\test_disagg_meta_config.cpp
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\__msvc_ostream.hpp(543): error C2220: the following warning is treated as an error
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\__msvc_ostream.hpp(543): warning C4003: not enough arguments for function-like macro invocation 'write'
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\__msvc_ostream.hpp(543): error C2059: syntax error: '('
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\__msvc_ostream.hpp(543): note: the template instantiation context (the oldest one first) is
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\__msvc_ostream.hpp(23): note: while compiling class template 'std::basic_ostream'
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\__msvc_ostream.hpp(543): error C2091: function returns function
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\__msvc_ostream.hpp(543): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\__msvc_ostream.hpp(543): error C2059: syntax error: ')'
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\__msvc_ostream.hpp(543): error C2059: syntax error: '{'
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\__msvc_ostream.hpp(543): error C2334: unexpected token(s) preceding '{'; skipping apparent function body
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\istream(536): warning C4003: not enough arguments for function-like macro invocation 'read'
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\istream(568): warning C4003: not enough arguments for function-like macro invocation 'read'
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\istream(536): error C2059: syntax error: '('
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\istream(536): note: the template instantiation context (the oldest one first) is
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\istream(33): note: while compiling class template 'std::basic_istream'
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\istream(536): error C2091: function returns function
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\istream(536): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\istream(536): error C2059: syntax error: ')'
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\istream(536): error C2059: syntax error: '{'
      [2026/01/02 13:16:29.123] C:\Program Files\Microsoft Visual Studio\2026\Professional\VC\Tools\MSVC\14.50.35717\include\istream(536): error C2334: unexpected token(s) preceding '{'; skipping apparent function body

            Assignee:
            [DO NOT USE] Backlog - Storage Engines Team
            Reporter:
            Alex Blekhman
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: