Hi, This is just an observation, but maybe there is a potential problem.
I am a happy user of GCC and I have many 4.x versions that I use on three development Linux boxes. The C++ template code in annex triggers a compile-time error on 4.2, 4.4, 4.6, but not on 4.7. (I suppose this bug has been found and tracked before.)
No problem with me, I have done projects with significantly less reliable development tools in the past. I will either upgrade or use a work-around in the source code (I chose to upgrade, this is server-side code where tools are under the project leader control).
The observation is *if* the gcc source code has some C++ depency(ies) which similarly needs say version>=4.7 and a machine has only gcc 4.4 installed, then migrating to e.g. gcc 5.3 requires installing v.X, (4.7 <= X < first-version-that-can't-be-compiled-without-C++).
My observation further hints that that "X" should be decided, and then lasting support for version "X" should be planned (I say "should" but who am I to request anything?)
The potential problem, from a tools user perspective, is that upgrading from 4.4 to 5.3 might be frustrating because the tools user would not have been warned about planning for an intermediate version installation. The potential problem is thus one of migration help file, no less and no more.
Again, many thanks for these development tools. Regards - Thierry Moreau CONNOTECH Experts-conseils inc. 9130 Place de Montgolfier Montreal, QC, Canada H2M 2A1 Tel. +1-514-385-5691 =========================== template<int SIZE> class t1 { public: int length; }; template<int SIZE> class t2 : public t1<SIZE> { public: void f(); }; template<int SIZE> void t2<SIZE>::f() { int &len=(t1<SIZE>::length); // ok t1<SIZE>::length=100; // ok unsigned char *val=new unsigned char[t1<SIZE>::length]; // ok int ln=-(t1<SIZE>::length); // ok int *ptlen=&(t1<SIZE>::length); // address-of operator in this // base class template member access // ==> compiler bug with gcc 4.2 to 4.6 } void fstatic() { t2<1000> obj; obj.f(); // instantiate ... } =========================== In member function 'void t2<SIZE>::f() [with int SIZE = 1000]': error: cannot convert 'int t1<1000>::*' to 'int*' in initialization ===========================