Boost logo

Boost :

From: Boris Gubenko (Boris.Gubenko_at_[hidden])
Date: 2007-01-24 10:22:22


Hartmut Kaiser wrote:
> Ok. But in this case the names are not 'original'. They come from manual
> template instatiations.

I, obviously, don't know all the details, but it seems to me that the
problem has to do with manual instantiations in instantiate_re2c_lexer.cpp
and instantiate_re2c_lexer_str.cpp modules:

instantiate_re2c_lexer.cpp:
---------------------------
template struct boost::wave::cpplexer::new_lexer_gen<
    BOOST_WAVE_STRINGTYPE::iterator>;
template struct boost::wave::cpplexer::new_lexer_gen<
    BOOST_WAVE_STRINGTYPE::const_iterator>;

instantiate_re2c_lexer_str.cpp:
-------------------------------
template struct boost::wave::cpplexer::new_lexer_gen<std::string::iterator>;
template struct
boost::wave::cpplexer::new_lexer_gen<std::string::const_iterator>;

Assuming that BOOST_WAVE_STRINGTYPE evaluates to std::string, it results
in two identical instantiations. It is OK on a platform supporting comdats,
but Tru64 (and AlphaVMS for that matter) can deal with it only in local
template instantiation mode. Follows an example.

Thanks,
  Boris

main.cpp
--------
#include <string>
#include <vector>
int main() {}
template class std::vector<std::string>;

foo.cpp
-------
#include <string>
#include <vector>
template class std::vector<std::string>;

bash-2.03$ aCC -V
aCC: HP aC++/ANSI C B3910B A.06.10 [Mar 22 2006]
bash-2.03$ aCC main.cpp foo.cpp
main.cpp:
foo.cpp:
bash-2.03$

bash-2.04$ cxx -V
Compaq C++ V7.1-006 for Compaq Tru64 UNIX V5.1B (Rev. 2650)
Compiler Driver V7.1-006 (cxx) cxx Driver
bash-2.04$ cxx main.cpp foo.cpp
main.cpp:
foo.cpp:
ld (prelink):
foo.o compressed: std::vector<std::basic_string<char, ...
multiply defined
...
bash-2.04$ cxx -tlocal main.cpp foo.cpp
main.cpp:
foo.cpp:
bash-2.04$

----- Original Message -----
From: "Hartmut Kaiser" <hartmut.kaiser_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Tuesday, January 23, 2007 4:05 PM
Subject: Re: [boost] [wave] Recent check-ins broke wave onTru64/CXX/RC_1_34_0

> Boris,
>
>> > What do you mean by 'original names'? Names in the original
>> C++ program?
>>
>> Yes. Here's an example:
>
> Ok. But in this case the names are not 'original'. They come from manual
> template instatiations.
>
> Regards Hartmut
>
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>
>


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk