[gnu.g++.bug] Inherited constructors

mikeb@SALMON.EE.UBC.CA (Mike Bolotski) (12/01/89)

I don't know whether this is a g++ bug or a 2.0 feature again, as I
don't have access to cfront.  The Lippman book seems to allow the
behaviour, and g++ 1.35 allowed it too.  How else should an interited
constructor be used?

-----------
Script started on Thu Nov 30 20:05:23 1989
coho{mikeb}71: g++ -v rho.cc
g++ version 1.36.2- (based on GCC 1.36)
 /usr/local/lib/gnu/gcc-cpp -+ -v -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ -Dmc68020 rho.cc /usr/tmp/cca27339.cpp
GNU CPP version 1.36
 /usr/local/lib/gnu/gcc-cc1plus /usr/tmp/cca27339.cpp -quiet -dumpbase rho.cc -version -o /usr/tmp/cca27339.s
GNU C++ version 1.36.2- (based on GCC 1.36) (68k, MIT syntax) compiled by GNU C version 1.36.
default target switches: -m68020 -mc68020 -m68881 -mbitfield
rho.cc: In method Beta::Beta (const class Beta &):
rho.cc:24: type `Beta' is derived from private `Alpha'
coho{mikeb}72: cat rho.cc

class Alpha 
{
  int	x;

public:
  
           Alpha(const Alpha&);
           Alpha(int );
};


class Beta : private Alpha
{
  char 	y;

 public:

          Beta(const Beta&);
          Beta(char );
};


inline Beta::Beta(const Beta& b) : Alpha(b), y('z') {}

int main()
{


}
script done on Thu Nov 30 20:08:27 1989
-- 

Mike Bolotski, Department of Electrical Engineering,
               University of British Columbia, Vancouver, Canada 
mikeb@salmon.ee.ubc.ca                    | mikeb%ee.ubc.ca@relay.ubc.ca
ee.ubc.ca!mikeb@uunet.uu.net       | uunet!ubc-cs!ee.ubc.ca!mikeb

schmidt@glacier.ics.uci.edu (Doug Schmidt) (12/01/89)

In article <8912010420.AA27527@salmon.ee.ubc.ca>, mikeb@SALMON (Mike Bolotski) writes:
>
>I don't know whether this is a g++ bug or a 2.0 feature again, as I
>don't have access to cfront.  The Lippman book seems to allow the
>behaviour, and g++ 1.35 allowed it too.  How else should an interited
>constructor be used?

This is a known bug with 1.36.2-.  As a workaround, try casting
the base initialization of Alpha, e.g.,

inline Beta::Beta(const Beta& b) : Alpha((Alpha &)b), y('z') {}

Doug
--
Any man's death diminishes me,              | schmidt@ics.uci.edu (ARPA)
Because I am involved in Mankind;           | office: (714) 856-4043
And therefore never send to know for whom the bell tolls;
It tolls for thee        -- John Donne