ronen@daisy.UUCP (daisy.ronen) (08/11/88)
I compiled the following program (taken from The Evolution of C++:1985 to 1987/
Bjarne Stroustrup USENIX proceedings C++ Workshop 1987) to examine the
private/protected/public scope handling of g++.
The program was compile without any error or warning.
The g++ compiler should report errors at the statements commented with error:
Here is the program:
class X {
// private by default
int priv;
protected:
int prot;
public:
int publ;
};
class Y : public X {
void mf();
};
void Y::mf()
{
priv = 1; // error: priv is private
prot = 2; // OK: prot is protected and mf() is a member of subclass Y
publ = 3; // OK: publ is public
}
void f(Y* p)
{
p->priv = 1; // error: priv is private
p->prot = 2; // error: prot is protected and f() is not a friend or member of X or Y
p->publ = 3; // OK: publ is public
}
Ronen Arad
Daisy Systems (Mnt View, CA)
(415) 960-6884
uucp: daisy!ronendamian@bruce.cs.monash.OZ.AU (Damian Conway) (09/06/90)
We have g++ 1.37.1 running on a Sun 350.
I _thought_ that if a class has no defined operator= the default
is copy by member.
However....
class class1 {
int d;
public:
class1() {d=1;}
friend class1& operator=(class1&,class1);
};
class1& operator=(class1& c1,class1 c2) {
c1.d=c2.d;
return c1;
}
class class2 {
int d;
public:
class2() {d=1;}
};
main() {
class2 c1,c2;
c1 = c2;
}
produces:
test.c: In function int main ():
test.c:25: bad argument 0 for function `operator = (class class1 &, class class1)' (type was class class2 )
Questions:
Is the defect in my understanding of g++?
Is this a known bug?
Is there a known fix?
damian
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
who: Damian Conway email:..!seismo!munnari!bruce.oz!damian
where: Dept. Computer Science phone: +61-3-565-5779
Monash University quote: "A pessimist is never disappointed."
Clayton 3168
AUSTRALIA