[Dune] gcc 3.4
Christian Engwer
christi at uni-hd.de
Mon May 3 23:00:40 CEST 2004
Hallo Duneler,
Ich habe mal versucht Dune mit dem gcc-3.4 zu kompilieren und - wie
haette es anders sein koennen?! - neue Probleme in unserem Code
gefunden, wo wir nicht standardkonform sind.
Ich habe bisher nicht das ganze Projekt uebersetzt, sondern nur den
tester und den auch nur mit dem sgrid.
Insgesamt habe ich 3 Sachen gefunden, auf die wir achten muessen:
1) Das Problem besteht immer dann, wenn wir von einer Templateklasse
ableiten und in der abgeleiteten Klasse auf Member der Vaterklasse
zugreifen wollen. Da die Vaterklasse eine Templateklasse ist, ist
die Aufloesung nicht von vornherein da.
Es gibt jetzt zwei Moeglichkeiten, wie wir das Problem angehen
koennen:
a) Man verwendet den scope-operator ( base<param>::foo() ), um
explizit anzugeben, wie die Template Vaterklasse heisst.
b) Man kann die Methode aus der Vaterklasse mit this->foo()
aufrufen.
2) Immer wenn man auf typen innerhalb einer Klasse zugreifen
will braucht man das Schluesslwort typename.
z.B.
class foo {
typedef int bar;
};
int main () {
// erstes uebliches Vorkommen bei uns
typedef typename foo::bar mybar;
mybar m;
// oder direkt
typename foo::bar m2;
}
3) Wenn ich verschachtelte template Parameter habe muss ich bei deren
Verwendung mit dem Schluesselwort Template sagen, wo drauf sie sich
beziehen.
z.B.
template <class A> foo {
template <int i> bar();
};
int main() {
foo<double> f;
f.template bar<i>();
}
Auch wenn es beschissen aussieht gehoert es so :-)
Man muss z.B. auch schreiben:
typedef typename G::template Traits<0>::LevelIterator LIe;
anstelle von
typedef G::Traits<0>::LevelIterator LIe;
So.. ich hoffe das hilft, dass wir das ganze Projekt uebersetzen
koennen. Ich werde mal versuchen weitere Teile zu uebersetzen.
Tschuess Christian
PS: Uebrigens laeuft es mit den genannten Aenderungen sogar mit dem
g++-3.3 und natuerlich immernoch mit dem icc
More information about the Dune
mailing list