[comp.lang.c++] explicit virtual destructor call

leo@atcmp.nl (Leo Willems) (10/04/90)

In par. 12.4 (last part) of E&S the difference between a virtual/static
destructor call is clearified.
The virtual call syntax is not accepted by all C++ compilers I have access to,
the most current version is Comeau's 2.1 port for the 3b2/600.


class X {
public:
	X(){ cout << "X::X()\n"; }
	virtual ~X(){ cout << "X::~X()\n"; }
};

void h(X& a)
{
	a.~X();		// virtual..... but generates syntax error.

	a.X::~X();	// static...... compiles, and behaves virtual!!
}


Should this program compile? If so are there already compilers that do?

Thanks 

Leo


BTW, what is the meaning of the 'extern gg(X&)' in the E&S example,
it's not a simple typo (s/gg/h/) because the returntypes are different?

kaiser@ananke.stgt.sub.org (Andreas Kaiser) (10/05/90)

In a message of <Oct 04 11:21>, Leo  Willems (leo@atcmp.nl ) writes: 

 LW> In par. 12.4 (last part) of E&S the difference between a virtual/static
 LW> destructor call is clearified.
 LW> The virtual call syntax is not accepted by all C++ compilers I have access to,
 LW> the most current version is Comeau's 2.1 port for the 3b2/600.

 LW> void h(X& a)
 LW> {
 LW>         a.~X();         // virtual..... but generates syntax error.
 LW>         a.X::~X();      // static...... compiles, and behaves virtual!!
 LW> }

Interesting questions, since there is a side-effect, at least in Zortech C++.

If I want to call a destructor in Zortech C++ explicitly, I have to use the full 
qualified name p->X::~X(); p->~X() is not possible. This is of importance in 
error handling, so it is absolutely necessary to provide a method of calling a 
virtual destructor virtual.

What is the standard? Should it be possible to call p->~X() instead if 
p->X::~X() to get the virtual calling technique? If not, the latter MUST call 
the destructor virtual - there would be no other way.

                Gruss, Andreas