Re: [boost] version conflicts: is there a solution?

There are many problems and this is not as simple as you think. Because if you have two versions of foo() defined in header files they may be exported and... collide. See: http://stackoverflow.com/questions/836875/ This problem is much more significant at UNIX platforms where all symbols are exported by default. Think of boost_1.38 boost/foo.hpp namespace boost { int foo() { return 1; } } boost_1.39 boost/foo.hpp namespace boost { int foo() { return 1; } } Now the library includes this header from 1.38 and automatically exports foo outside. Now, you use 1.39 and may get different values of foo(). You may do simple tests and find how bad this is. So... NO You can't use two versions of boost in same project especially at ELF platforms. ...... I just what to remind that there is a script I had written that renames boost namespace and macros preventing namespace collisions of two different versions of Boost. http://lists.boost.org/Archives/boost/2009/05/151816.php So take a look on it, and give feedback, so I would be able to submit it officially to Boost. Artyom
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.

Artyom <artyomtnk <at> yahoo.com> writes:
I just what to remind that there is a script I had written that renames boost namespace and macros preventing namespace collisions of two different versions of Boost.
http://lists.boost.org/Archives/boost/2009/05/151816.php
So take a look on it, and give feedback, so I would be able to submit it officially to Boost.
Artyom
Thank you all for the helpful comments; this is a vexing problem indeed. I think the renaming script looks like my best bet, I will check out bcp as well. -Lewis
participants (2)
-
Artyom
-
Lewis Hyatt