Support using copyObject in standard C++
Peter Eisentraut <peter@eisentraut.org>
Author:
Peter Eisentraut <peter@eisentraut.org>
Date: 2026-03-02T10:48:13Z
Releases:
19 (unreleased)
Support using copyObject in standard C++
Calling copyObject in C++ without GNU extensions (e.g. when using
-std=c++11 instead of -std=gnu++11) fails with an error like this:
error: use of undeclared identifier 'typeof'; did you mean 'typeid'
This is due to the C compiler used to compile PostgreSQL supporting
typeof, but that function actually not being present in the C++
compiler. This fixes that by explicitely checking for typeof support
in C++, and then either use that or define typeof ourselves as:
std::remove_reference_t<decltype(x)>
According to the paper that led to adding typeof to the C standard,
that's the C++ equivalent of the C typeof:
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2927.htm#existing-decltype
Author: Author: Jelte Fennema-Nio <postgres@jeltef.nl>
Discussion: https://www.postgresql.org/message-id/flat/DGPW5WCFY7WY.1IHCDNIVVT300%2540jeltef.nl
Files
| Path | Change | +/− |
|---|---|---|
| config/c-compiler.m4 | modified | +29 −0 |
| configure | modified | +54 −0 |
| configure.ac | modified | +1 −0 |
| meson.build | modified | +25 −0 |
| src/include/c.h | modified | +21 −0 |
| src/include/pg_config.h.in | modified | +7 −0 |
| src/test/modules/test_cplusplusext/test_cplusplusext.cpp | modified | +2 −0 |
Discussion
Cited messages not in the archive:
DGPW5WCFY7WY.1IHCDNIVVT300%40jeltef.nl