[gnu.g++.bug] Semicolon can be replaced by dummy function!

pelle@eva.slu.se (OVE EWERLID) (04/26/89)

If this has been reported before, please ignore!

G++ 1.35-, running on a sun3;

Consider:

	-+-		-+-		-+-

class Test
{
protected:
  double xx, yy, zz;
public:
  Test(doubel, double, double);
}   		// Semicolon missing!

dummy(){}	// This seems to replace the missing semicolon after the class!

inline Test::Test(double x, doubel y, double z)
{
  xx=x; yy=y; zz=z;
}

main(){}

	-+-		-+-		-+-


// The above compiles, but should it?
// I think the answer is no as the above is invalid C++!
// Now look at the this:


	-+-		-+-		-+-

class Test
{
protected:
  double xx, yy, zz;
public:
  Test(doubel, double, double);
};   // The semicolon added

inline Test::Test(double x, doubel y, double z)
{
  xx=x; yy=y; zz=z;
}


	-+-		-+-		-+-

// which is the valid C++ code.
// The bug seems to be the fact that one can leave out the semicolon
// after a class definition and replace it with a dummy function.
// I haven't checked, but it may also apply to structs.

tiemann@YAHI.STANFORD.EDU (Michael Tiemann) (04/26/89)

   class Test
   {
   protected:
     double xx, yy, zz;
   public:
     Test(doubel, double, double);
   }   		// Semicolon missing!
   
   dummy(){}	// This seems to replace the missing semicolon after the class!
   
   inline Test::Test(double x, doubel y, double z)
   {
     xx=x; yy=y; zz=z;
   }
   
You get what you deserve when you say

	dummy(){}

instead of

	int dummy(){}

If you specify the return type, the compiler will issue an error
message.  Otherwise it needs infinite lookahead to determine whether
or not you made an erroneous declaration.

Michael