By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,077 Members | 1,309 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,077 IT Pros & Developers. It's quick & easy.

using declaration question

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

using MyClass::~MyClass;

?

--
Christopher Benson-Manica | I *should* know what I'm talking about - if I
ataru(at)cyberspace.org | don't, I need to know. Flames welcome.
Jul 22 '05 #1
Share this Question
Share on Google+
10 Replies


P: n/a

"Christopher Benson-Manica" <at***@nospam.cyberspace.org> wrote in
message news:c1**********@chessie.cirr.com...
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
Jul 22 '05 #2

P: n/a
Christopher Benson-Manica wrote:

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.

--

Pete Becker
Dinkumware, Ltd. (http://www.dinkumware.com)
Jul 22 '05 #3

P: n/a

"Christopher Benson-Manica" <at***@nospam.cyberspace.org> wrote in message
news:c1**********@chessie.cirr.com...
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

Jul 22 '05 #4

P: n/a

"Jonathan Turkanis" <te******@kangaroologic.com> wrote in message
news:c1*************@ID-216073.news.uni-berlin.de...

"Christopher Benson-Manica" <at***@nospam.cyberspace.org> wrote in
message news:c1**********@chessie.cirr.com...
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.


Yes, see 7.3.3.4

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


Baaad Microsoft! :-)

-Mike
Jul 22 '05 #5

P: n/a

"Mike Wahler" <mk******@mkwahler.net> wrote in message
news:UC*****************@newsread2.news.pas.earthl ink.net...

"Jonathan Turkanis" <te******@kangaroologic.com> wrote in message
news:c1*************@ID-216073.news.uni-berlin.de...

"Christopher Benson-Manica" <at***@nospam.cyberspace.org> wrote in
message news:c1**********@chessie.cirr.com...
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.


Yes, see 7.3.3.4


That'll teach me to skip over notes!

Jonathan
Jul 22 '05 #6

P: n/a
Mike Wahler <mk******@mkwahler.net> spoke thus:
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*

--
Christopher Benson-Manica | I *should* know what I'm talking about - if I
ataru(at)cyberspace.org | don't, I need to know. Flames welcome.
Jul 22 '05 #7

P: n/a
"Christopher Benson-Manica" <at***@nospam.cyberspace.org> wrote in message
news:c1**********@chessie.cirr.com...
Mike Wahler <mk******@mkwahler.net> spoke thus:
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...)


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
Jul 22 '05 #8

P: n/a

"Christopher Benson-Manica" <at***@nospam.cyberspace.org> wrote in
message news:c1**********@chessie.cirr.com...
Mike Wahler <mk******@mkwahler.net> 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
Jul 22 '05 #9

P: n/a
Jonathan Turkanis <te******@kangaroologic.com> spoke thus:
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...

--
Christopher Benson-Manica | I *should* know what I'm talking about - if I
ataru(at)cyberspace.org | don't, I need to know. Flames welcome.
Jul 22 '05 #10

P: n/a
Christopher Benson-Manica <at***@nospam.cyberspace.org> wrote in message news:<c1**********@chessie.cirr.com>...
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
Jul 22 '05 #11

This discussion thread is closed

Replies have been disabled for this discussion.