Pádraig Brady wrote: > > /* The condition (99 < __GNUC__) is temporary, until we know about the > > first G++ release that supports static_assert. */ > > # if (99 < __GNUC__) && defined __cplusplus > > # define HAVE_STATIC_ASSERT 1 > > # endif > > > g++ supports static_assert since 4.3 I think
You are right that it's listed as "implemented" since GCC 4.3 in [1] and [2]. But I got error messages, when I tried it with this test program: $ cat foo1.cc #include <assert.h> static_assert (sizeof (long) > 1, "long too small"); $ /arch/x86-linux/gnu-inst-gcc/4.3.0/bin/g++ -S foo1.cc foo1.cc:2: error: expected constructor, destructor, or type conversion before '(' token $ /arch/x86-linux/gnu-inst-gcc/4.4.0/bin/g++ -S foo1.cc foo1.cc:2: error: expected constructor, destructor, or type conversion before '(' token $ /arch/x86-linux/gnu-inst-gcc/4.5.0/bin/g++ -S foo1.cc foo1.cc:2:15: error: expected constructor, destructor, or type conversion before '(' token $ /arch/x86-linux/gnu-inst-gcc/4.6.0/bin/g++ -S foo1.cc foo1.cc:2:15: error: expected constructor, destructor, or type conversion before '(' token The test program ought to be valid according to ISO C++ N3242 sections 7.(1) and 7.(4). The reason is that the static_assert assert parsing is only enabled when you pass -std=c++0x or -std=gnu++0x. It's not enabled by default. We could use a 'defined __GXX_EXPERIMENTAL_CXX0X__' clause, but that macro is probably going away some day... Bruno [1] http://gcc.gnu.org/projects/cxx0x.html [2] http://gcc.gnu.org/gcc-4.3/cxx0x_status.html -- In memoriam Georg Elser <http://en.wikipedia.org/wiki/Georg_Elser>