On Tue, Jun 26, 2007 at 11:42:27PM +0200, Herman Geza wrote: > struct Point { > float x, y, z; > }; > struct Vector { > float x, y, z; > > Point &asPoint() { > return reinterpret_cast<Point&>(*this); > } > };
> Point and Vector have the same layout, but GCC treats them different when > it does aliasing analysis. I have problems when I use Vector::asPoint. > I use asPoint very trivially, it is very easy to detect (for a human) > that references point to the same address. Like As a "human", I don't see how they are the same. Other than having three fields with the same type, and same name, what makes them the same? What happens when Point or Vector have a fourth field added? What if somebody decides to re-order the fields to "float z, x, y;"? Would you expect the optimization to be silently disabled? Or would you expect it to guess based on the variables names? Cheers, mark -- [EMAIL PROTECTED] / [EMAIL PROTECTED] / [EMAIL PROTECTED] __________________________ . . _ ._ . . .__ . . ._. .__ . . . .__ | Neighbourhood Coder |\/| |_| |_| |/ |_ |\/| | |_ | |/ |_ | | | | | | \ | \ |__ . | | .|. |__ |__ | \ |__ | Ottawa, Ontario, Canada One ring to rule them all, one ring to find them, one ring to bring them all and in the darkness bind them... http://mark.mielke.cc/