
Boris,
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 for looking into this. I initially had the same idea. But unfortunately your assumption is not correct, as BOOST_WAVE_STRINGTYPE normally is defined as some flex_string<...> type (see the mangled names refer to flex_string as well). I will add some safe guards to avoid this situation, though. Still not sure, what's going on here. I'm pretty sure I have not even touched these template instantiations for years. Regards Hartmut