C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Unbequemlichkeiten bei der Modernisierung

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Olaf Krzikalla
Guest





PostPosted: Tue Sep 21, 2004 5:21 pm    Post subject: Unbequemlichkeiten bei der Modernisierung Reply with quote



Hi,

ich compiliere momentan eine ganze Menge älteren Code durch gcc 3.3.1.
Dass dabei natürlich einige Dinge angemeckert werden, ist klar. Einige
Sachen jedoch verwirren mich zutiefst:

class foo
{
explizit foo (int i) {}
foo (int i, int j) {}
void bar () const;
}

void baz()
{
foo (1).bar();
}

gcc will hier unbedingt folgende Klammern sehen:

void baz()
{
(foo (1)).bar();
}

Diese Schreibweise hab ich noch nirgendwo sonst gesehen.
Ein zweites Problem hatte ich in Zusammenhang mit dem üblichen
Deklaration-statt-Variablendefinition:

class foo2
{
explizit foo2 (const foo&) {}
void bar () const;
}

void baz2()
{
foo2 (foo (1, 2)).bar();
}

Diesen Ausdruck habe ich überhaupt nicht compiliert gekriegt. Erwartet
hätte ich, dass

void baz2()
{
(foo2 ((foo (1, 2)))).bar();
}

korrekt wäre. Nix da. Hier mußte ich schließlich eine nichttemporäre
foo-Variable anlegen.
Das dritte Problem ist etwas komplizierter:

template<class T>
struct temp;

template<class T>
struct fnresult : private T
{
operator temp<T>() {};
};

struct poly
{
poly& operator = (const temp<poly>& p);
fnresult<poly> calc_poly();
};

void f_poly()
{
poly p, q;
q = p.calc_poly();
}

Hier beschwert sich gcc über Access-Probleme. Klar, er versucht, den
compilergenerierten poly::operator= anzuwenden und kann das nur durch
Verletzung der private-Klausel erreichen. Den zweiten Weg über die
Konvertierung nach temp<poly> sieht er nicht oder ignoriert sie. Da
private-Ableitungen ja aber eigentlich auch dazu da sind,
Konvertierungen zu unterbinden, fühle ich mich hier im Recht (und
zumindest Borland stimmt mir in allen neueren Compilervarianten zu).
Welche dieser Probleme sind denn nun gcc-gemacht und welche beruhen auf
meiner ungenügenden Standardkenntnis?

MfG
Olaf Krzikalla

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.