[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