Portable StaticAssertExpr
Peter Eisentraut <peter@eisentraut.org>
From: Peter Eisentraut <peter@eisentraut.org>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2026-02-23T07:00:35Z
Lists: pgsql-hackers
Attachments
- 0001-Portable-StaticAssertExpr.patch (text/plain) patch 0001
The current implementation of StaticAssertExpr() uses the GCC extension statement expressions. In this patch, I'm proposing a different implementation that doesn't require nonstandard extensions. The trick is to put the static_assert() into a struct definition. This appears to be a common way to do this. (See [0] for references.) Unfortunately, MSVC before version 19.33 fails to compile this, but since it was fixed later, I think this was just a bug that was later fixed. I'm keeping the old workaround code as a fallback for this case, but eventually we can remove that. For C++, the struct trick doesn't work, but I found a different implementation that works on all supported compilers, using lambda expressions. I found this at [1]. [0]: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3715.pdf [1]: https://stackoverflow.com/questions/31311748
Commits
-
Portable StaticAssertExpr
- aa7c86852343 19 (unreleased) landed