Re: Make copyObject work in C++

Peter Eisentraut <peter@eisentraut.org>

From: Peter Eisentraut <peter@eisentraut.org>
To: Bryan Green <dbryan.green@gmail.com>, pgsql-hackers@lists.postgresql.org
Date: 2026-02-07T09:33:43Z
Lists: pgsql-hackers
On 04.02.26 16:54, Bryan Green wrote:
> On 1/25/2026 6:42 AM, Jelte Fennema-Nio wrote:
>> On Tue Jan 20, 2026 at 5:28 PM CET, Peter Eisentraut wrote:
>>> I have split your first patch further.  For a start, I left out the
>>> PG_MODULE_MAGIC*-related changes and disabled the module under MSVC.
>>> This has been committed.  I plan to let the buildfarm run with it for
>>> a day or two and then add in the basic MSVC support.
>>
>> To hopefully make your life a bit easier. Here's a rebased version that
>> enables the MSVC support again, with an updated commit message.
>>
> This causes the build to break on VS 2022.  Versions prior do not have
> support for __typeof_unqual__.  This would have led to
> HAVE_TYPEOF_UNQUAL being not defined on the buildfarm causing the
> fallback to copyObjectImpl() for VS 2019.
> 
> When you build on VS 2022 you will get an error:
> ../src/backend/commands/event_trigger.c(1901): error C2100: you cannot
> dereference an operand of type 'void'
> 
> VS 2022 (MSVC) does not handle the void * dereference the way gcc/clang
> does (thanks to GNU extensions, I believe).  It exposes
> __typeof_unqual__ even it C11, but enforces strict C semantics on the
> void * dereference.  To work on this platform the call
> copyObject(lfirst(cell)) would need to have a cast to the correct
> concrete type: copyObject((Node *)lfirst(cell)).
> 
> I was about to update to VS 2026, but now I think I should have an
> instance of VS from 2019, 2022, and 2026.

I have reverted this patch for now to research it further.




Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Enable test_cplusplusext with MSVC

  2. Disable some C++ warnings in MSVC

  3. meson: Make room for C++-only warning flags for MSVC

  4. Make fixed-length list building macros work in C++

  5. Make unconstify and unvolatize use StaticAssertVariableIsOfTypeMacro

  6. Use typeof everywhere instead of compiler specific spellings

  7. Test List macros in C++ extensions

  8. Test most StaticAssert macros in C++ extensions

  9. Revert "Change copyObject() to use typeof_unqual"

  10. Fix for C++ compatibility

  11. tests: Add a test C++ extension module