[gnu.g++.bug] Type bug

samples@SEQUOIA.BERKELEY.EDU (12/15/89)

I think this is a bug: I have to leave open the possibility that
anything having to do with void* pointers is legitimate, although IMHO
it shouldn't.  Here is a program that compiles without error, even
though one call on the function fcn has no matching signature:

<===== Cut Here ======>
typedef void *USERTYPE;

class BASE
{
public:
  void fcn(USERTYPE);
};

void
BASE::fcn(USERTYPE p) { }

class POINTEDTO1
{
public:
  int i;
};

class POINTEDTO2
{
public:
  int j;
};
  
typedef POINTEDTO1 *TYPE1;
typedef POINTEDTO2 *TYPE2;

class DERIVED1 : public BASE
{
public:
  void fcn(TYPE1 p) { BASE::fcn(USERTYPE(p)); }
};

main()
{
  DERIVED1 obj;
  TYPE1 v1;
  TYPE2 v2;
  obj.fcn(v1);
  obj.fcn(v2); // there is no function `fcn(TYPE2)' defined
	// but my compiler doesn't complain.
}

<===== Cut Here =====>

I'm using this technique to define what I call `coercion' classes.
Stroustrup uses this technique in his book to define a generic list
class.  This example was created from a more complicated program that
had totally different variable names, class names and typedef names,
so I don't think it has anything to do with that.

Am I wrong?  Or should the compiler complain about that second call on
fcn?

I'm running g++ version 1.35.0 on a Sun 3/60 running Sun OS 4.0.
Compile command: g++ CutHere.C

tm.h -> config/tm-sun3+.h
md -> config/m68k.md

Dain