This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
is it a bug or do i miss something?(about conflicts between template parameter and data member)
- From: éææ <longhaitao at otsc dot com dot cn>
- To: gcc-help <gcc-help at gcc dot gnu dot org>
- Date: Sat, 17 Nov 2007 12:51:51 +0800
- Subject: is it a bug or do i miss something?(about conflicts between template parameter and data member)
gcc version:
g++ (GCC) 4.1.1 20061011 (Red Hat 4.1.1-30)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
----------------source code------------------------------------
#include <stdio.h>
class Base {
public:
int type;
Base(int type) {this->type = type;}
void showtype() {printf("%d\n",type);}
};
template<int type>
class Derived : public Base {
public:
Derived();
};
template<int type>
Derived<type>::Derived()
: Base(type)
{
}
template<int TYPE>
class Derived2 : public Base {
public:
Derived2();
};
template<int TYPE>
Derived2<TYPE>::Derived2()
: Base(TYPE)
{
}
enum {
ZERO = 0,
NONZERO = 1,
};
typedef Derived<NONZERO> NonZeroClass;
typedef Derived2<NONZERO> NonZeroClass2;
int main() {
NonZeroClass tmp;
tmp.showtype();
NonZeroClass2 tmp2;
tmp2.showtype();
}
-----------------source code end-------------------------------
----------------output------------------------------
165643296
1
---------------output end----------------------------
the only difference between Derived and Derived2 is that
Derived's template parameter is the same as Base's data member(they are
both type).
The output to me is a surprise. i do not know whether it is a bug, so
just post it here
3x for your attention.