From 9c05f152b5dd7aeaa6e64bd4ed2fc86bab437073 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 11 Mar 2026 11:54:10 +0100 Subject: [PATCH] Fixes for C++ typeof implementation This fixes two bugs in commit 1887d822f14. First, if we are using the fallback C++ implementation of typeof, then we need to include the C++ header for std::remove_reference_t. This header is also likely to be used for other C++ implementations of type tricks, so we'll put it into the global includes. Second, for the case that the C compiler supports typeof in a spelling that is not "typeof" (for example, __typeof__), then we need to #undef typeof in the C++ section to avoid warnings about duplicate macro definitions. Reviewed-by: Jelte Fennema-Nio Discussion: https://www.postgresql.org/message-id/flat/92f9750f-c7f6-42d8-9a4a-85a3cbe808f3%40eisentraut.org --- src/include/c.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/include/c.h b/src/include/c.h index f66c752d4a0..5b678283469 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -82,6 +82,14 @@ #endif #ifdef ENABLE_NLS #include +#endif + +#ifdef __cplusplus +extern "C++" +{ +/* This header is used in the definition of various C++ things below. */ +#include +} #endif /* Pull in fundamental symbols that we also expose to applications */ @@ -435,6 +443,7 @@ * [1]: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2927.htm#existing-decltype */ #if defined(__cplusplus) +#undef typeof #ifdef pg_cxx_typeof #define typeof(x) pg_cxx_typeof(x) #elif !defined(HAVE_CXX_TYPEOF)