Brendon Costa <[EMAIL PROTECTED]> writes: | Hi all, | | I have just come across a small difference in the way the C an C++ | front ends handle anonymous struct types which is causing me some | grief. In particular the following code: | | typedef struct | { | int b1; | int b2; | } Blah; | | void Function(Blah* b) {} | | When i get the Blah type in the function above (After removing the | pointer) i then use TYPE_MAIN_VARIANT on it and do some special | processing on the resulting main varient type.
C++ defines a notion of "class name for linkage purpose" -- that is a notion used to define the One Definition Rule. In general the TYPE_NAME of TYPE_MAIN_VARIANT is the class name for linkage purpose. The behaviour you reported on implements the rule 7.1.3/5: If the typedef declaration defines an unnamed class (or enum), the first typedef-name declared by the declaration to be that class type (or enum type) is used to denote the class type (or enum type) for linkage purposes only (3.5). -- Gaby