public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
From: Jörgen Sigvardsson <jorgen.sigvardsson@kau.se>
To: nobody@gcc.gnu.org
Cc: gcc-prs@gcc.gnu.org
Subject: Re: c++/3024: class inheritance of template arguments fail
Date: Fri, 01 Jun 2001 04:36:00 -0000	[thread overview]
Message-ID: <20010601113601.5369.qmail@sourceware.cygnus.com> (raw)

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 3151 bytes --]

The following reply was made to PR c++/3024; it has been noted by GNATS.

From: =?iso-8859-1?q?J=F6rgen=20Sigvardsson?= <jorgen.sigvardsson@kau.se>
To: "Artem Khodush" <artem@duma.gov.ru>
Cc: <gcc-gnats@gcc.gnu.org>, <gcc-bugs@gcc.gnu.org>
Subject: Re: c++/3024: class inheritance of template arguments fail
Date: Fri, 1 Jun 2001 14:39:07 +0200

 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
 On Friday 01 June 2001 12:15, Artem Khodush wrote:
 > > Classes may not inherit from template argument. I use this with
 > > the Microsoft Visual C++ compiler frequently (ATL uses it heavily).
 > > I don't know if this is C++ by the book, or if it is a Microsoft
 > > extension.
 > >
 > > The code which fail for me looks like:
 > >
 > > template <typename T>
 > > class Y : public T
 > > {
 > > // ...
 > > };
 > >
 > > class X : public Y<X>
 > > {
 > > };
 >
 > Your code does not compile with Visual C++ 6.0.
 > The error message is pretty much the same:
 >
 > c:\m\t\main.cpp(4) : error C2504: 'X' : base class undefined
 >
 > This has nothing to do with inheriting from template argument.
 > You want to have a class which indirectly inherits from itself,
 > this is impossible in C++.
 
 I beg to differ. Check out this page: 
 http://msdn.microsoft.com/library/devprods/vs6/visualc/vcmfc/_atl_ccomobject.htm
 
 (I'll cite the text here, since the page does not load correctly with 
 Netscape 4.x - I wonder why? :)
 
 - ----- BEGIN -----
 CComObject
 
 template< class Base >
 class CComObject : public Base
 
 Parameters
 
 Base
 
 Your class, derived from CComObjectRoot or CComObjectRootEx, as well as from 
 any other interfaces you want to support on the object.
 
 CComObject implements IUnknown for a nonaggregated object. However, calls to 
 QueryInterface, AddRef, and Release are delegated to CComObjectRootEx.
 
 - ----- END -----
 
 When you create an ATL COM-object, you inherit from this class like:
 class ATL_NO_VTABLE MyClass : public CComObject<MyClass>
 {
 	// ...
 };
 
 (ATL_NO_VTABLE is a M$-specific thing - this may perhaps be the thing that 
 makes this possible? - if you want to investigate, then atlcom.h may be a 
 good starting point)
 
 At any rate, this is perfectly legal. This kind of stuff is quite neat, since 
 it allows you to very generic coding.  You can make boiler plate code go away 
 (joy! - In this case, the programmer is relieved of implementing the IUnknown 
 interface).
 
 If this is a microsoft extension, then g++ should probably not implement it. 
 But if it is legal C++, then this feature would be very handy indeed. I can 
 see several KDE/KPart-extensions that would relieve the programmer from a lot 
 of boiler plate code.
 
 (I'm not subscribed to any gcc-mailinglist, so if you respond to the list, 
 please make sure to CC me)
 
 - -- 
 Jörgen Sigvardsson, B. Sc.
 Lecturer, Computer Science Dept. Karlstad University
 Tel: +46-(0)54-700 1786
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.0.4 (FreeBSD)
 Comment: For info see http://www.gnupg.org
 
 iD8DBQE7F4zsJtcD8rikkmwRAjiVAJwKNr8+uFPzxut1JR5rjq4A6KwHAQCfeCf3
 evDjxl7Rn5YDv0UmDdfRUnU=
 =4DlK
 -----END PGP SIGNATURE-----


             reply	other threads:[~2001-06-01  4:36 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-06-01  4:36 Jörgen Sigvardsson [this message]
  -- strict thread matches above, loose matches on Subject: below --
2001-06-01  3:26 Artem Khodush
2001-06-01  1:36 jorgen.sigvardsson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20010601113601.5369.qmail@sourceware.cygnus.com \
    --to=jorgen.sigvardsson@kau.se \
    --cc=gcc-prs@gcc.gnu.org \
    --cc=nobody@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).