#include "objfiles.h"
#include "top.h"
-/* For libguile v2.0.9 and SCM_DEBUG_TYPING_STRICTNESS == 1, SCM_UNPACK(x) is
- defined as:
-
- ((scm_t_bits) (0? (*(SCM*)0=(x)): x))
-
- and for v2.0.10 it's defined as:
-
- ((scm_t_bits) (0? (*(volatile SCM *)0=(x)): x))
-
- The volatile was added to avoid a clang warning.
-
- The latter form causes a Werror=volatile with C++20.
- This was reported upstream (
- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=65333 ).
-
- The former form causes a Werror=sequence-point with gcc 7-14.
-
- Work around these problem by using SCM_DEBUG_TYPING_STRICTNESS == 0. */
+/* GCC introduced C++20 support in GCC 8, using -std=c++2a (the name of the
+ C++20 standard before publishing) and __cplusplus 201709L. In GCC 10,
+ -std=c++20 was added, but __cplusplus stayed at 201709L, and was only
+ changed to the standard 202002L in GCC 11. Consequently, some C++20
+ features and restrictions need to be tested against the non-standard
+ 201709L, otherwise the build with GCC 10 and -std=c++20 will break. */
+#if __cplusplus >= 201709L
+/* Work around Werror=volatile in SCM_UNPACK for
+ SCM_DEBUG_TYPING_STRICTNESS == 1. Reported upstream:
+ https://debbugs.gnu.org/cgi/bugreport.cgi?bug=65333 . */
#define SCM_DEBUG_TYPING_STRICTNESS 0
+#endif
#include "libguile.h"
struct block;