This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C++ conversion: an observation about minimum compiler version


This is now bugzilla 56558.

Thierry Moreau wrote:
Hi,

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.)


=========================== 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
===========================



--
- Thierry Moreau

CONNOTECH Experts-conseils inc.
9130 Place de Montgolfier
Montreal, QC, Canada H2M 2A1

Tel. +1-514-385-5691


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]