This bug report follows up on a gnulib bug whose patch is here: http://lists.gnu.org/archive/html/bug-gnulib/2005-08/msg00003.html The problem is that when g++ is used to compile regex.h in the gnulib context, it gets the diagnostics: regex.h:569: error: expected primary-expression before "__restrict__" regex.h:569: error: expected `]' before "__restrict__" regex.h:569: error: expected `,' or `...' before "__restrict__" I'll attach the patch.
Created attachment 589 [details] patch for regex.h problem with g++
The patch is wrong. g++ does support __restrict. There might be some versions which didn't but this does not mean all version can be excluded.
I don't know which versions of g++ you're talking about, but the abovementioned bug report from Bruno Haible says that no version of g++ in the 3.2.*, 3.3.*, 3.4.*, 4.0.[01] series supports the [__restrict] syntax, and I just now verified that g++ 4.1.0 does not support it either; please see the shell transcript below. Perhaps you confused __restrict with [__restrict]? This change talks about the latter, not the former. 586-penguin $ g++ -c t.cc t.cc:21: error: expected primary-expression before '__restrict__' t.cc:21: error: expected `]' before '__restrict__' t.cc:21: error: expected ',' or '...' before '__restrict__' 587-penguin $ gcc -c t.cc t.cc:21: error: expected primary-expression before '__restrict__' t.cc:21: error: expected `]' before '__restrict__' t.cc:21: error: expected ',' or '...' before '__restrict__' 588-penguin $ cp t.cc t.c; gcc -c t.c 589-penguin $ gcc --version | sed 1q gcc (GCC) 4.1.0 590-penguin $ g++ --version | sed 1q g++ (GCC) 4.1.0 591-penguin $ cat t.cc #ifndef __restrict # if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)) # if defined restrict || 199901L <= __STDC_VERSION__ # define __restrict restrict # else # define __restrict # endif # endif #endif /* gcc 3.1 and up support the [restrict] syntax. */ #ifndef __restrict_arr # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) # define __restrict_arr __restrict # else # define __restrict_arr # endif #endif extern int regexec (const int *__restrict __preg, const char *__restrict __string, int __nmatch, int __pmatch[__restrict_arr], int __eflags);
I checked in an appropriate patch.