[gnu.g++] Gnu Gbugs?

tiemann@YAHI.STANFORD.EDU (Michael Tiemann) (05/16/89)

   Path: mit-eddie!rutgers!rochester!kodak!ektools!randolph
   From: ektools!randolph@ai.mit.edu (Gary L. Randolph)
   Newsgroups: comp.lang.c++
   Date: 16 May 89 14:22:54 GMT
   Sender: randolph@ektools.mit.edu (Gary L. Randolph)
   Organization: Eastman Kodak, Dept. 47, Rochester N.Y.
   Lines: 105
   Apparently-To: lang-c++-netnews-dist@wheaties.ai.mit.edu

   I have been using both AT&T's cfront and Gnu's g++ compiler.
   My copy of Gnu's g++ is about 3 months old so some of
   what follows may be dated.
It is.

   Are the following current Gnu gbugs???

   1.)
      The exact match rule that Stroustrup (pgs. 122 and 290)
      discusses does not work.  The following was used as a
      test:

   overload show;

   void show(int x)
   {
   cout<<"\nThe integer is: "<<x<<"\n";
   }
   void show(int x, int y)
   {
   cout<<"\nThe integers are: "<<x<<" and "<<y<<"\n";
   }

   void show(float f)
   {
   cout<<"\nThe float is: "<<f<<"\n";
   }

   main()
   {
   show(25);
   show(2,3);
   show(3.14);
   }

When compiled with GNU C++ 1.35.0, the program prints this:

yahi% a.out

The integer is: 25

The integers are: 2 and 3

The float is: 3.14
yahi% 

   2.)
     If I use the class name and the scope resolution
     operator, I can access private base parts from a
     derived class!!!  Here is an example:

   class A
   {
   private:
     int x;
   public:
     A(int y){x = y;}
   }; 
   class B : A
   {
   public:
     B(int y):(y){}
     privPrint(){cout<<"x is: "<<A::x<<"\n";}
   };

   main()
   {
   B b(4);
   b.privPrint();
   }

   AT&T correctly produces the error message x is private.
   Note that Gnu works correctly *IF* the A:: is ommited. 

This is no longer a bug:

GNU C++ version 1.35.0 (sparc) compiled by GNU C version 1.35.
In method int B::privPrint ():
x.c:14: member `x' is a private member of class `A'

   3.)
     I also have a small complaint about cfront that may
     be changed in 2.0.  When I look at the constructor
     for a derived class, I like to have the base class
     name explicit. For instance, say I have a class named
     StarCruiser that is constructed with a char*.  I
     like to see this name in the constructor for the
     derived class, Federation.

   Federation::Federation(char* util, char* id, int meds,
			   int fp, int sob)
			   :StarCruiser(util)
   NOT the following:

   Federation::Federation(char* util, char* id, int meds,
			   int fp, int sob)
			   :(util)

   I know the base class name is optional on many c++
   implementations and would like cfront to stop
   choking on this.
GNU C++ has supported this feature since December, 1987.

Michael