On 5 Apr 2012, David C. Rankin spake thusly:
I read that. What are you saying that we are being
bitten by in there? Most of
it was Greek, but the only thing I could draw from it is that some of the new
C++11 implementation is now clashing with old code in TDE causing it to be
interpreted by the compiler as something other than what it was designed to be.
Definitely not. The C++11 stuff only applies when the appropriate -std
option is specified, which it had bloody well better not be in this case
because C++11 and C++99 have different libstdc++ ABIs (e.g. the size of
an STL list<> is different).
-> G++ now sets the predefined macro __cplusplus to
the correct value, 199711L
for C++98/03, and 201103L for C++11.
That's the same as always for C++98/03: only C++11 is different (which
couldn't be set to the right value before owing to lack of a time
machine).
-> G++ now correctly implements the two-phase
lookup rules such that an
unqualified name used in a template must have an appropriate declaration found
either in scope at the point of definition of the template or by
argument-dependent lookup at the point of instantiation.
At last!
How you check for this stuff is way beyond me....
Wait for a failure, then move the errant definition up a bit. (This may
require creating new header files here and there, I suppose.)
It's just code motion, not rewriting. Not hard.
--
NULL && (void)