Resolved this. I was including asio, a header-only library which itself includes windows.h, without properly wrapping Unreal’s windows platform type enable/disable code around it.
I had got confused between windows header inclusion and temp-reenabling-windows-platform-types. I think this lead to a situation where a windows.h inclusion without the wrapper or allow/hide includes got through to unreal C++ code, causing platform types to conflict in name with unreal types.
Windows header inclusion in unreal:
#include "Windows/WindowsHWrapper.h"
Wrapping a header which needs to use Windows platform types (which I had missed):
#include "Windows/AllowWindowsPlatformTypes.h"
#include "Windows/AllowWindowsPlatformAtomics.h"
#include "asio.hpp"
#include "Windows/HideWindowsPlatformTypes.h"
#include "Windows/HideWindowsPlatformAtomics.h"