On 19 July 2007 14:08, tbp wrote: > I have that usual heavy duty 3 fp components class that needs to be > reasonably efficient and takes this form for g++ > struct vec_t { > float x,y,z; > const float &operator()(const uint_t i) const { return *(&x + i); } > float &operator()(const uint_t i) { return *(&x + i); } // <-- guilty > [snip ctors, operators & related cruft] > }; > > I use this notation
That's not "notation". That's "illegal invalid code that invokes undefined behaviour". struct vec_t is not a POD type (since it has ctors) and you don't actually have any right to assume that x, y and z are arranged in consecutive memory locations. > Alas, somewhere between gcc-4.3-20070608 (ok) and gcc-4.3-20070707 > (not ok ever since), the non const indexing started to trigger bogus > codegen with Bogus codegen is the inevitable result of bogus code. Garbage in, garbage out. BTW, the const indexing is completely undefined too. > At this point i'd need some guidance from compiler developers No, you need to read a book on how to program in C++. > What kind of idiom am i supposed to write such thing in to get back > efficient and correct code? This is a question for gcc-help, not for the main gcc list. "Legal valid" code would be a good start. cheers, DaveK -- Can't think of a witty .sigline today....