Geoffrey Keating <[EMAIL PROTECTED]> writes: | Gabriel Dos Reis <[EMAIL PROTECTED]> writes: | | > Jason Merrill <[EMAIL PROTECTED]> writes: | > | > [...] | > | > | > | - I don't recall suggesting that | > | > | multiple types with the same name should be able to exist. | > | > then you have to consider that suggestion and come with an answer. | > | | > | I don't see why. The point is that visibility is orthogonal to | > | linkage; a class S with external linkage is still required by the ODR | > | to be unique across multiple shared objects even if some of the | > | symbols that refer to it can't be referenced from outside their | > | defining object. The visibility restrictions place practical limits | > | on how other objects can use the type, but that doesn't mean it isn't | > | the same type. | > | > So, -concretely- what happens to a class S (e.g. associated type info object | > address, address of member functions, etc.) with external linkage, | > defined in multiple translation units, with say hidden visibility? | | Under the current definition, this is impossible. If you have a class | S defined in one object with hidden visibility, and you try to define | it in a different object, you get a different class named S, just as if | you'd defined it in a different namespace or similar. | | Thus, the type info objects are different, the member functions have | different addresses, and so on. | | This is achived by giving the various pieces hidden visibility.
On platfoms where __GXX_MERGED_TYPEINFO_NAMES is not defined, before() is defined in terms of the mangled names of the types. I'm unable to find the mangled names are different. -- Gaby