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