Gcc 3.4.6

Hi.

I tried to compile root (tag is 5-21-01-alice) on SL 4.7, g++ 3.4.6 (so, now Rene cannot tell I have compiler “vremen caria Goroha” == compiler of “Tzar Goroh times”).
Is this compiler still supported?
I have such an errors (only part of them), I know the reason (the same problem was somewhere in AliRoot with gcc 3.2 - there is no global operator == for iterators, it’s a member function, and it can be a member function, standard does not require it to be a global function):

cint/cint/lib/dll_stl/G__cpp_map.cxx: In function int G__map__0_166(G__value*, const char*, G__param*, int)': cint/cint/lib/dll_stl/G__cpp_map.cxx:10647: error: no matching function for call tooperator==(std::_Rb_tree_iterator<std::pair<const std::string, int> >&, std::_Rb_tree_iterator<std::pair<const std::string, int> >&)'
cint/cint/lib/dll_stl/G__cpp_map.cxx: In function int G__map__0_167(G__value*, const char*, G__param*, int)': cint/cint/lib/dll_stl/G__cpp_map.cxx:10653: error: no matching function for call tooperator!=(std::_Rb_tree_iterator<std::pair<const std::string, int> >&, std::_Rb_tree_iterator<std::pair<const std::string, int> >&)'
cint/cint/lib/dll_stl/G__cpp_map.cxx: In function int G__map__0_177(G__value*, const char*, G__param*, int)': cint/cint/lib/dll_stl/G__cpp_map.cxx:10721: error: no matching function for call tooperator==(std::_Rb_tree_iterator<std::pair<const std::string, long int> >&, std::_Rb_tree_iterator<std::pair<const std::string, long int> >&)‘
cint/cint/lib/dll_stl/G__cpp_map.cxx: In function int G__map__0_178(G__value*, const char*, G__param*, int)': cint/cint/lib/dll_stl/G__cpp_map.cxx:10727: error: no matching function for call tooperator!=(std::_Rb_tree_iterator<std::pair<const std::string, long int> >&, std::_Rb_tree_iterator<std::pair<const std::string, long int> >&)’

Hi,

we have
class iterator … { …
#if defined (G__VISUAL) || (defined(G__GNUC_VER) && G__GNUC_VER>=3004) || defined(G__INTEL_COMPILER)
bool operator==(const iterator& x) ;
bool operator!=(const iterator& x) ;

We do know that the standard doesn’t define where it is :slight_smile: But that doesn’t help - we need to know where it is, because we have to create a dictionary for it. You are the first one to run into this problem with GCC3.4.x. And that’s strange - ROOT is built with GCC 3.4.x on a daily basis. So why doesn’t your compiler pick this up? Can you put an #error into that part of cint/cint/lib/prec_stl/map and see whether CINT complains - i.e. whether it really reads that part of the code?

Cheers, Axel.

Hi, Axel. Thank you for your reply. The reason was: instead of downloading ROOT from svn repository, I simply copied it from another linux machine, which has different compiler (gcc 3.2 :slight_smile: ) and
$ROOTSYS/cint/cint/lib/dll_stl has all files, which were generated for that machine. I did make distclean, but G__cpp_xxx files were not deleted and
they were compiled with errors I quoted. So, the only problem - make distclean didn’t remove these files - I don’t know in fact, if it should.