Re: Change copyObject() to use typeof_unqual

Peter Eisentraut <peter@eisentraut.org>

From: Peter Eisentraut <peter@eisentraut.org>
To: Jelte Fennema-Nio <postgres@jeltef.nl>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2026-03-13T10:43:15Z
Lists: pgsql-hackers

Attachments

On 07.03.26 01:17, Jelte Fennema-Nio wrote:
> On Fri, 6 Mar 2026 at 20:17, Peter Eisentraut <peter@eisentraut.org> wrote:
>> This revealed an insufficiency in that commit, which I fix in the first
>> patch.
> 
> Thanks!

There is a failure related to this on buildfarm member sevengill:

../pgsql/src/test/modules/test_cplusplusext/test_cplusplusext.cpp:41:22: 
error: no template named 'remove_reference_t' in namespace 'std'; did 
you mean 'remove_reference'?

I don't know how that makes sense.  Maybe this is a problem in the local 
installation of the compiler or standard library.

(This is also a bit suspicious because AFAICT, clang 15 defaults to 
C++14, but on that animal it thinks it needs to add -std=gnu++11.)

>> I have addressed the above problem by swapping the order of the probes
>> (putting the underscore variant first), as discussed.
> 
> Annoying that this is needed, but I agree that it's the least bad
> option in this case.

I committed this and it still fails, but the failure is now narrower. 
There is a failure on buildfarm member taipan because it uses an unusual 
combination of gcc and clang (the gcc is much newer than clang).  The 
only sensible workaround I could think of is a hardcoded override based 
on the clang version, as in the attached patch.  And alternative is that 
we decide that we don't want to support this combination, meaning that 
we would effectively require that clang is approximately as-old-or-newer 
than gcc.

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Add some const qualifiers enabled by typeof_unqual change on copyObject

  2. Hardcode typeof_unqual to __typeof_unqual__ for clang

  3. Clean up postgres_fdw/t/010_subscription.pl.

  4. Hardcode override of typeof_unqual for clang-for-bitcode

  5. Make typeof and typeof_unqual fallback definitions work on C++11

  6. Change copyObject() to use typeof_unqual

  7. Fixes for C++ typeof implementation

  8. Support using copyObject in standard C++