AW: [Gecode] gcc 3.4 build problems

pape5004 pape5004 at stud.uni-saarland.de
Tue Feb 22 22:27:22 CET 2005


Hi all!

>>>>I'm not sure if this is a bug or a feature, to me it definitely
seems like a bug. 

Don't know whether anyone has already found a solution, but my good old
friend "google" said
that it's a feature of gcc 3.4. See:
http://gcc.gnu.org/gcc-3.4/changes.html

If I understood the problem right here's what they say:


In a template definition, unqualified names will no longer find members
of a dependent base (as specified by [temp.dep]/3 in the C++ standard).
For example,

	template <typename T> struct B {
	  int m;
	  int n;
	  int f ();
	  int g ();
	};
	int n;
	int g ();
	template <typename T> struct C : B<T> {
	  void h ()
	  {
		m = 0; // error
		f ();  // error
		n = 0; // ::n is modified
		g ();  // ::g is called
	  }
	};

You must make the names dependent, e.g. by prefixing them with this->.
Here is the corrected definition of C<T>::h,

	template <typename T> void C<T>::h ()
	{
	  this->m = 0;
	  this->f ();
	  this->n = 0
	  this->g ();
	}

As an alternative solution, you may use using declarations instead of
this->:

	template <typename T> struct C : B<T> {
	  using B<T>::m;
	  using B<T>::f;
	  using B<T>::n;
	  using B<T>::g;
	  void h ()
	  {
		m = 0;
		f ();
		n = 0;
		g ();
	  }
	};

Hope this helps....
Since I haven't gcc 3.4 installed on my machine yet I can't tell whether
this is ok, but to me it seems
that the compiler just insists on a more detailed qualification, i.e. 3
or 4 signs more to write :-D

Greetz 


Patrick Pekczynski





More information about the gecode-users mailing list