From 3cd8506ff89aa9e7cc596d67b3ad09b2c41d658c Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Tue, 17 Aug 2021 09:16:55 +0200 Subject: [PATCH] Use macro to detect real gcc as opposed to e.g. clang disguising as gcc --- src/common/conf_post.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/common/conf_post.h b/src/common/conf_post.h index eac832c0..7093ead2 100644 --- a/src/common/conf_post.h +++ b/src/common/conf_post.h @@ -67,7 +67,14 @@ typedef int ssize_t; # define PRETEND_USE(expr) ((void)(expr)) #endif /* PRETEND_USE */ -#ifdef __GNUC__ +// It's complicated to really detect gnu gcc because other compilers define __GNUC__ +// See stackoverflow questions/38499462/how-to-tell-clang-to-stop-pretending-to-be-other-compilers +#if defined(__GNUC__) && !defined(__llvm__) && !defined(__INTEL_COMPILER) +#define REAL_GCC __GNUC__ // probably +#endif + +#ifdef REAL_GCC +// Older gcc versions pretended to supply std::regex, but the resulting programs mostly crashed. #include #if ! __GNUC_PREREQ(6,0) #define NO_STD_REGEX 1