Hi all,
I want to use boost CRC, but when I #include , I get
the following error:
"error: ISO C++ forbids variable-size array 'table_type'"
in line 468 of crc.hpp.
gcc --version tells me, I'm using the following gcc on my Mac (OSX
10.5):
"i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5484)"
I use boost 1.34.1, but as crc.hpp of version 1.35 does not differ, I
suppose updating the library would not help.
The error is in the following context:
<code>
struct crc_table_t
{
BOOST_STATIC_CONSTANT( std::size_t,
byte_combos = (1ul << CHAR_BIT) );
typedef mask_uint_t<Bits> masking_type;
typedef typename masking_type::fast value_type;
#if defined(__BORLANDC__) && defined(_M_IX86) && (__BORLANDC__ == 0x560)
// for some reason Borland's command line compiler (version
// 0x560)
// chokes over this unless we do the calculation for it:
typedef value_type table_type[ 0x100 ];
#else
typedef value_type table_type[ byte_combos ];//<-- error here
#endif
static void init_table();
static table_type table_;
}; // boost::detail::crc_table_t
</code>
I suppose it has to do with a bug of gcc, that cannot calculate
"byte_combos" at compile time (or at least it acts as if it had to
calculate "byte_combos" at runtime). A fix would be to enhance the
"#if defined..." to the gcc versions with the said bug.
I just realized there was an entry in the bug tracking system at
sourceforge concerning this problem:
https://sourceforge.net/tracker/?func=detail&atid=107586&aid=1478435&gro
up_id=7586
but I have no permission to view the issue. The entry was made in early
2006. Is there any work on this issue?
TIA
Norbert
P.S.: I also realize I can get around the problem by not using
"-pedantic", but for me this is a valuable switch.