This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
RE: Template help,To Alexandre Oliva
- To: "Alexandre Oliva" <aoliva at redhat dot com>
- Subject: RE: Template help,To Alexandre Oliva
- From: "Shiv Shankar Ramakrishnan" <Shiv at pspl dot co dot in>
- Date: Tue, 14 Nov 2000 10:33:43 +0530
- Cc: <gcc at gcc dot gnu dot org>, <louispp at hotmail dot com>
|> #if _MSC_VER >= 1200 //check for the version of your compiler
|> #define TYPENAME_ typedef
|> #else
|> #define TYPENAME_ typename
|> #endif
|
|This is wrong. `typename' is not a replacement for `typedef'. In
|this case, one must use typedef, because a type alias is what the
|declaration is going to define, and typename, because it must precede
|any template-dependent nested-name-specifiers that are supposed to be
|typenames regardless of the template arguments used in an
|instantiation.
Oops! You are right. I just shot that off in a hurry. My mistake. Yes a
typedef needs to precede the declaration in the typename case also.
What was I thinking? I guess these things sometimes get tricky and one
can miss out things :( (Esp. is you have used the older way)
So yes it should be -
#if _MSC_VER >= 1200 //check for the version of your compiler
#define TYPENAME_
#else
#define TYPENAME_ typename
#endif
And so the use as you pointed becomes -
typedef TYPENAME_ T1::Type1 Type1;
|Note that there are other uses of the typename keyword, such as in
|template parameters, that should either remain unchanged or be
|substituted with the `class' keyword.
Yes. Except that I assumed that the code (being older style) would not
use typename in template parameters. And yes in the other case its
better to change all template parameter uses of typename to the 'class'
keyword than use another ugly macro.
My apologies for causing all the confusion.
Thanks,
Shiv