🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Ron Guilmette Fri, 10 Mar 1989 22:31
BUG(s) in G++ 1.34.0 - missing errors (again)
#1721
Author: Ron Guilmette
Date: Fri, 10 Mar 1989 22:31
74 lines
2874 bytes
This bug report (for G++ 1.34.0/Sun3) is very much like my previous one about
private constructors, except this one is about private destructors.

In either case, the programmer should be allowed to make certain operations
of a given class (such as assignment, construction, and destruction) illegal
outside of the class just by declaring these operations within the private
part of the class declaration.

Unfortunately, g++ doesn't (currently) let you control the visibility of
constructors or destructors this way.  These operations remain accessable
anywhere regardless of their public or private status.

The following code demonstrates this.  I believe that all of the lines
marked with // ERROR should have errors messages issued for them because
these are the places where base::~base() gets (implicitly) called.

Following the code is a compilation log.

Cut here
------------------------------------------------------------------------------
/*
Description - check that if a destructor is needed (e.g. at the point
		where an object is destroyed) and that if there is a destructor
		for the class of the object, but it is private, a reasonable
		error message is issued.

		Cases: objects which are: (1) static (2) auto (3) heap.

		Cases: objects of (1) a type which has a private default
		    constructor, and (2) objects of a type derived from a type
		    which has a private default constructor.
*/

class base
{
    ~base();
    friend class friendly;
};

static base static_base_object_1;		// ERROR
base static_base_object_2;			// ERROR

void f1 ()
{
	base local_base_object;
	base *base_ptr = new base;

	return;					// ERROR, ERROR
}
 
class derived : base
{
public:
    ~derived();
};

static derived static_derived_object_1;		// ERROR
derived static_derived_object_2;		// ERROR

void f2()
{
	derived local_derived_object;
	derived *derived_ptr = new derived;

	return;					// ERROR, ERROR
}
----------------------------------------------------------------------------------
g++  -S -v x03.cc
g++ version 1.34.0.0
 /usr/local/src/lib/1.34.0.0/sun3/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ -Dmc68020 x03.cc /tmp/cca07729.cpp
GNU CPP version 1.34.0.0
 /usr/local/src/lib/1.34.0.0/sun3/gcc-c++ /tmp/cca07729.cpp -quiet -dumpbase x03.cc -noreg -version -o x03.s
GNU C++ version 1.34.0.0 (68k, MIT syntax) compiled by GNU C version 1.33.
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