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.