[EMAIL PROTECTED] (Joseph S. Myers) wrote on 16.09.05 in <[EMAIL PROTECTED]>:
> C++ requires (A) and provides examples of valid programs where it can be > told whether a normalisation of UCNs is part of the implementation-defined > phase 1 transformation. As I gave in a previous discussion, > > #include <stdlib.h> > #include <string.h> > #define h(s) #s > #define str(s) h(s) > int > main() > { > if (strcmp(str(str(\u00c1)), "\"\\u00c1\"")) abort (); > if (strcmp(str(str(\u00C1)), "\"\\u00C1\"")) abort (); > } Incidentally, gcc 3.3.5 passes this test. However, I'm far from convinced that this is reasonable for a compiler supporting UCNs. It seems to me they really ought to be handled more like trigraphs, so that this would be if (strcmp(str(str(\u00C1)), "\"\u00C1\"")) abort (); (note one less backslash), and the case of the C would be irrelevant - in fact, *anything* that makes it relevant feels like a bug to me. I think comparing \u00C1 to \xC1 is a false friend here - \xC1 is only valid inside a string. Instead look at identifiers. If str(str(ab\00C1cd)) == "\"ab\\00C1cd\"", then I'll certainly be unpleasantly surprised - that is almost certainly not what I wanted. MfG Kai