Apparent template instantiation error in egcs 1.1.1

Gisli Ottarsson gisli@master.adams.com
Thu Feb 18 13:34:00 GMT 1999


Version:  egcs-2.91.60
Platform: Linux and IRIX64

A simplified version of my program is enclosed.  The code compiles
without a hitch on IRIX (MIPSpro Compilers: Version 7.2.1.1m, CC -n32)
and HP (aCC: HP ANSI C++ B3910B A.01.12).  

The error message from egcs is:

example.cxx: In method `class ManyColumns TR1::A(const class ManyColumns &) const':
example.cxx:24: no matching function for call to `ManyColumns::transformed_by (const TR1 &, {unknown type}) const'
example.cxx: In method `class ManyColumns TR2::A(const class ManyColumns &) const':
example.cxx:30: no matching function for call to `ManyColumns::transformed_by (const TR2 &, {unknown type}) const'

The code reads as follows:

#include <list.h>

struct Column {
   double a;
   Column(double b):a(b){}
};

class ManyColumns {
   list<Column> as;
public:
   template <class T>
   ManyColumns transformed_by(const T& transformer, Column (T::* A) (const Column&) const ) const
   {
      ManyColumns ret;
      for(list<Column>::const_iterator i=as.begin(); i!=as.end(); i++)
	 ret.as.push_back( transformer.A(*i) );
      return ret;
   }
};

class TR1 {
public:
   Column      A(const Column& col)       const { return 105 * col.a; }
   ManyColumns A(const ManyColumns& cols) const { return cols.transformed_by(*this, &TR1::A); }
};

class TR2 {
public:
   Column      A(const Column& col)       const { return 5 * col.a; }
   ManyColumns A(const ManyColumns& cols) const { return cols.transformed_by(*this, &TR2::A); }
};

int main()
{

}


More information about the Gcc-bugs mailing list