-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Build, Test Catch2
-
None
-
Storage Engines - Foundations
-
None
-
2
-
2
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