My compiler reported a build error in the following code block today.
long ScDPOutput::GetHeaderDim( const ScAddress& rPos, USHORT& rOrient ) { SCCOL nCol = rPos.Col(); SCROW nRow = rPos.Row(); SCTAB nTab = rPos.Tab(); if ( nTab != aStartPos.Tab() ) return -1; // wrong sheet // calculate output positions and sizes CalcSizes(); // test for column header if ( nRow == nTabStartRow && nCol >= nDataStartCol && nCol < nDataStartCol + nColFieldCount ) { rOrient = sheet::DataPilotFieldOrientation_COLUMN; long nField = nCol - nDataStartCol; return pColFields[nField].nDim; } // test for row header if ( nRow+1 == nDataStartRow && nCol >= nTabStartCol == nCol < nTabStartCol + nRowFieldCount ) { rOrient = sheet::DataPilotFieldOrientation_ROW; long nField = nCol - nTabStartCol; return pRowFields[nField].nDim; } // test for page field SCROW nPageStartRow = aStartPos.Row() + ( bDoFilter ? 1 : 0 ); if ( nCol == aStartPos.Col() && nRow >= nPageStartRow && nRow < nPageStartRow + nPageFieldCount ) { rOrient = sheet::DataPilotFieldOrientation_PAGE; long nField = nRow - nPageStartRow; return pPageFields[nField].nDim; } //! single data field (?) rOrient = sheet::DataPilotFieldOrientation_HIDDEN; return -1; // invalid } |
In particular, my compiler didn’t like the ==
(equality operator) in nTabStartCol == nCol
in the 3rd if statement block from the top. Looking at the if statement before and after that, you’ll probably say “yeah, looks like that ‘==’ was supposed to be &&, so what’s the surprise?” Well, the thing is, this piece of code has not changed for at least a few years, which means it was compiling just fine up until today (though it may have caused a bug somewhere…). And even today, it compiled fine before I made a few changes that were not related to this method, and I didn’t modify this method itself at all.
I have to wonder, why this code block compiled fine up till today, and what change of mine triggered the compiler to complain all of a sudden if the method itself is unchanged…. :-/