🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by samples Thu, 14 Dec 1989 23:29
Type bug
#2090
Author: samples
Date: Thu, 14 Dec 1989 23:29
66 lines
1819 bytes
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
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads