using declaration question

  • Thread starter Christopher Benson-Manica
  • Start date
C

Christopher Benson-Manica

Why can't I use a class destructor in a using declaration:

using MyClass::~MyClass;

?
 
J

Jonathan Turkanis

Christopher Benson-Manica said:
Why can't I use a class destructor in a using declaration:

using MyClass::~MyClass;

Interesting question! It seems to be allowed by the grammar; it may be
illegal for some other reason, however.

VC7.1 is the only compiler I've tried which accepts it.

Jonathan
 
P

Pete Becker

Christopher said:
Why can't I use a class destructor in a using declaration:

using MyClass::~MyClass;

Because destructors, like constructors, do not have names, and a using
declaration requires a name.
 
M

Mike Wahler

Christopher Benson-Manica said:
Why can't I use a class destructor in a using declaration:

using MyClass::~MyClass;

====================================================================
ISO/IEC 14882:1998(E)

7.3.3 The using declaration

4 A using­-declaration used as a member­-declaration shall refer
to a member of a base class of the class being defined, shall
refer to a member of an anonymous union that is a member of a
base class of the class being defined, or shall refer to an
enumerator for an enumeration type that is a member of a base
class of the class being defined. [Example:

class C {
int g();
};

class D2 : public B {
using B::f; // OK: B is a base of D2
using B::e; // OK: e is an enumerator of base B
using B::x; // OK: x is a union member of base B
using C::g; // error: C isn’t a base of D2
};

--end example] [Note: since constructors and destructors do not
have names, a using­-declaration cannot refer to a constructor <<=====
or a destructor for a base class. Since specializations of member
templates for conversion functions are not found by name lookup,
they are not considered when a using­-declaration specifies a
conversion function (14.5.2). ] If an assignment operator brought
from a base class into a derived class scope has the signature of
a copy­-assignment operator for the derived class (12.8), the using­-
declaration does not by itself suppress the implicit declaration
of the derived class copy­-assignment operator; the copy­-assignment
operator from the base class is hidden or overridden by the
implicitly­-declared copy­-assignment operator of the derived class,
as described below.
====================================================================


-Mike
 
M

Mike Wahler

Jonathan Turkanis said:
Interesting question! It seems to be allowed by the grammar; it may be
illegal for some other reason, however.

Yes, see 7.3.3.4
VC7.1 is the only compiler I've tried which accepts it.

Baaad Microsoft! :)

-Mike
 
C

Christopher Benson-Manica

Mike Wahler said:
7.3.3 The using declaration
snip lovely quote from Standard

Ah, a quote from the Standard - thank you :) (even though it has now
obliterated all my hopes and dreams...) So here's my SUPER question:
How can I reconcile conflicting destructor declarations when multiply
inheriting, which I WOULD do with using; if that old wolf Stroustrup
hadn't forbidden it...? *sigh*
 
M

Mike Wahler

Christopher Benson-Manica said:
Ah, a quote from the Standard - thank you :) (even though it has now
obliterated all my hopes and dreams...)

Please don't shoot the messenger. :)
So here's my SUPER question:
How can I reconcile conflicting destructor declarations when multiply
inheriting, which I WOULD do with using; if that old wolf Stroustrup
hadn't forbidden it...? *sigh*

Sorry, I'm a MI 'virgin', hopefully one of the gurus can help.

I am watching your little 'project' with interest.
Have you visited Dietmar's web site?

-Mike
 
J

Jonathan Turkanis

Christopher Benson-Manica said:
Mike Wahler <[email protected]> spoke thus:
Ah, a quote from the Standard - thank you :) (even though it has now
obliterated all my hopes and dreams...) So here's my SUPER question:
How can I reconcile conflicting destructor declarations when multiply
inheriting, which I WOULD do with using; if that old wolf Stroustrup
hadn't forbidden it...? *sigh*

If you're not planning on calling the destructors explicitly, you
don't need to reconcile them. If you want to call one explicitly, you
can qualify it with its namespace or enclosing class.

What are you trying to do?

Jonathan
 
C

Christopher Benson-Manica

Jonathan Turkanis said:
If you're not planning on calling the destructors explicitly, you
don't need to reconcile them.

Well, only one of them is virtual, so my compiler has been
complaining... At any rate, there is *something* amiss, although it
could be my fault ;)
What are you trying to do?

Not go insane...
 
R

Ralf Schneewei?

Christopher Benson-Manica said:
Why can't I use a class destructor in a using declaration:

using MyClass::~MyClass;

?

Because the child class has another name. The name of the destructor is
always the name of the class. To build the call chain of destructors the
compiler needs a destructor in the parent and the child class.

Ralf

www.oop-trainer.de
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,162
Messages
2,570,896
Members
47,434
Latest member
TobiasLoan

Latest Threads

Top