]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fixes for C++ typeof implementation
authorPeter Eisentraut <peter@eisentraut.org>
Wed, 11 Mar 2026 10:54:10 +0000 (11:54 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Wed, 11 Mar 2026 10:54:10 +0000 (11:54 +0100)
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 <type_traits> 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 <postgres@jeltef.nl>
Discussion: https://www.postgresql.org/message-id/flat/92f9750f-c7f6-42d8-9a4a-85a3cbe808f3%40eisentraut.org

src/include/c.h

index f66c752d4a032c2f37fe276ac6bcc058b1676016..5b6782834692ed5053c27c3cf4894c5e7e365fe1 100644 (file)
 #endif
 #ifdef ENABLE_NLS
 #include <libintl.h>
+#endif
+
+#ifdef __cplusplus
+extern "C++"
+{
+/* This header is used in the definition of various C++ things below. */
+#include <type_traits>
+}
 #endif
 
  /* Pull in fundamental symbols that we also expose to applications */
  * [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)