The following code incorrectly compiles, and worse returns incorrect result. on i686-pc-linux-gnu, both 4.1.0 and 4.1.1
-- start snip #include <stddef.h> // (incomplete) template class that encapsulates an array of chars template<int i> class CharArray { public: char d[i]; char& operator [] ( int indx ) { return d[indx]; } }; struct Foo { int i; CharArray<44> caCharArray; }; int main( int argc, char* argv[] ) { Foo foo; int i; // Shouldn't compile, and worse results in incorrect offset. i = offsetof(Foo, caCharArray[0]); } -- end snip variables as an array index correctly give an error, but unfortunatly not everything that looks like an constant array index is. -- Summary: incorrectly allowing non-constant expression to offsetof() Product: gcc Version: 4.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: karl dot corbin at Summit dot Fiserv dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28573