
Frank Mori Hess wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Wednesday 24 June 2009, Edward Diener wrote:
Having the definitions separated into different translation units doesn't seem to be enough to prevent ODR violations according to the standard. It gives a list of requirements for multiple definitions in different translation units in section 3.2.5. I do not believe the C++ definition of a "translation unit" comes into play when dealing with a library, but rather with header files included within a source file. If the implementation is internal, as the OP suggested, then I would assume that no header files for the implementation are distributed and therefore no ODR violation for that particular situation should occur.
Of course there may be conflicts when linking if internal details of a library are exported but that is not something about which the C++ standard says anything AFAIK.
Can you point to anything in the standard that supports your position?
Where in the standard do you see any mention of an ODR violation occuring where there are no header files being distributed for inclusion by a source file which would create such a violation ? As I understand the OP, the Boost header files for the internal usage of Boost in the distributed library is not distributed or needed by the end user when using the library. How can something which does not exist for the end-user of a library produce an ODR violation in a translation unit with other header files ?