This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Bug report
- To: bug-gcc at gnu dot org
- Subject: Bug report
- From: François Morvillier <fmorvill at club-internet dot fr>
- Date: Wed, 22 Mar 2000 00:02:30 +0100
This is a bug I've found :
** Version :
gcc version 2.95.2 19991024 (release)
** System :
Pentium II 233Mhz
Suse Linux 6.2
** Command line :
gcc -v --save-temps IMGbug.cc
** Output :
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/specs
gcc version 2.95.2 19991024 (release)
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/cpp -lang-c++ -v
-D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__
-Dunix -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__
-D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS -Acpu(i386)
-Amachine(i386) -Di386 -D__i386 -D__i386__ -Di686 -Dpentiumpro -D__i686
-D__i686__ -D__pentiumpro -D__pentiumpro__ IMGbug.cc IMGbug.ii
GNU CPP version 2.95.2 19991024 (release) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../include/g++-3
/usr/local/include
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../i686-pc-linux-gnu/include
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include
/usr/include
End of search list.
The following default directories have been omitted from the search
path:
End of omitted list.
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/cc1plus IMGbug.ii
-quiet -dumpbase IMGbug.cc -version -o IMGbug.s
GNU C++ version 2.95.2 19991024 (release) (i686-pc-linux-gnu) compiled
by GNU C version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).
IMGbug.cc: In instantiation of `Img::A<I,O><int,int>':
IMGbug.cc:32: instantiated from `Img::B<int,int>'
IMGbug.cc:64: instantiated from here
IMGbug.cc:10: Internal compiler error.
IMGbug.cc:10: Please submit a full bug report.
IMGbug.cc:10: See
<URL:http://www.gnu.org/software/gcc/faq.html#bugreport> for
instructions.
**
please find the attached file : IMGbug.ii
great work people!
regards,
Francois Morvillier
# 1 "IMGbug.cc"
namespace Img {
template <class I, class O> class A;
template <class I, class O> class B;
}
template <class I, class O>
class Img::A {
public :
virtual A<I, O>* clone() const = 0;
virtual O operator()(I x, I y) const = 0;
};
namespace Img {
template <class I, class O>
class B : public A<I, O> {
public :
B(A<I, O>*);
B(const B<I, O>&);
virtual ~B();
B<I, O>& operator=(const B<I, O>&);
virtual B<I, O>* clone() const;
virtual O operator()(I x, I y) const;
private :
A<I, O>* ref;
};
}
template <class I, class O>
Img::B<I, O>::B(A<I, O>* i) : ref(i->clone()) {}
template <class I, class O>
Img::B<I, O>::B(const B<I, O>& i) : ref(i.ref->clone()) {}
template <class I, class O>
Img::B<I, O>& Img::B<I, O>::operator=(const B<I, O>& i) {
if (this==&i) return *this;
delete ref;
ref = i.ref->clone();
return *this;
}
template <class I, class O>
Img::B<I, O>::~B() { delete ref; }
template <class I, class O>
Img::B<I, O>* Img::B<I, O>::clone() const {
return new B<I, O>(ref);
}
template <class I, class O>
O Img::B<I, O>::operator()(I x, I y) const {
return (*ref)(x, y);
}
void main() {
Img::B<int, int> I(0);
}