Gabriel Dos Reis wrote:
>> Joe Buck wrote:
Now, this being a conscious decision for ODR violation, it would
probably need to be documented because then we may have

   typeinfo1 != typeinfo2

and yet

    !typeinfo1.before(typeinfo2) && !typeinfo2.before(typeinfo1)

There are probably other inconsistencies to audit.

| We can have two distinct
| classes named S, and no one can tell.  Each bit of code will see one
| definition of S.

I think that Joe's point is that IF you have two classes named S, then they're hidden away in separate shared libraries and you can't compare them, because no piece of code knows about both of them. Any class that is part of the public interface of a shared library is part of the public interface, and therefore must be unique through the program.

In any case, this ODR business seems rather tangential to the discussion of visibility semantics. The primary purpose of the visibility work is limiting the number of symbols exported from a particular shared library in order to cut down on load time. Can we please focus on the semantics we want for that instead of trying to solve a theoretical problem that has been around as long as people have tried to use shared libraries with C++?

Jason

Reply via email to