Hi Benjamin,
The IntelC 7.1 compiler error is as follows :-
d:/dev/mozilla/xpcom/build/dlldeps.cpp(114): error: expression must be an lvalue or a function designator nsIDHashKey::HashKey(&nsID());
Well, this is definitely a compiler bug, as nsID() is a constructor that creates an lvalue on the stack, but switching it to nsnull is fine, it if helps.
As far as performance is concerned, the IntelC compiler has a great many optimization options that no doubt others will experiment with in the near future, once we get the compile nasties out of the way.
I am assuming that you are compiling without any optimization at the moment?
PS. If you have time, could you add a comment to the source along the lines of your final paragraph for future reference.
If you write a patch with a little comment, I'll get it reviewed and checked in. File a bug and cc me.
Current xul compile issue ../../../../dist/include/xpcom/nsIClassInfo.h(111): warning #68: integer conversion resulted in a change of sign enum { RESERVED = 2147483648U }; ^
../../../../dist/include/string/nsXPIDLString.h(191): warning #69: integer conversion resulted in truncation return (mBuffer->GetImplementationFlags() & shared_buffer_handle_type::kIsNULL)
These are incorrect warnings: the underlying type of an enumeration must be stored by the compiler in a manner that preserves the full range of values, in this case an unsigned int. See the ISO-ANSI C++ specification section 7.2 #5.
