This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
member template partial specialisation
- To: gcc-bugs at gcc dot gnu dot org
- Subject: member template partial specialisation
- From: Mathias Doreille <doreille at imacpc34 dot epfl dot ch>
- Date: Thu, 18 May 2000 14:36:33 +0200 (CEST)
The following C++ code (see section 14.7.3 paragraph 15 of the C++
draft) does not compile with both gcc-2.95.2 and gcc 2.96 20000518.
template<class T> struct A {
template<class X> void g(X) {}
};
template<> template<class X> void A<int>::g(X) {}
main()
{
A<double> a;
double i = 0.0;
a.g(i);
}
===================
With gcc-2.95.2
g++ -v
Reading specs from /soft/gcc-2.95.2/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/specs
gcc version 2.95.2 19991024 (release)
/soft/gcc-2.95.2/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__ 14_7_3_15.C /tmp/ccCCtrnx.ii
GNU CPP version 2.95.2 19991024 (release) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/soft/gcc-2.95.2/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../include/g++-3
/soft/gcc-2.95.2/include
/soft/gcc-2.95.2/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../i686-pc-linux-gnu/include
/soft/gcc-2.95.2/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.
/soft/gcc-2.95.2/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/cc1plus /tmp/ccCCtrnx.ii -quiet -dumpbase 14_7_3_15.cc -version -o /tmp/ccEHN18T.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).
test.C:7: template parameters specified in specialization
test.C:7: no `void A<int>::g(X)' member function declared in class `A<int>'
test.C: In method `void A<int>::g<X>(X)':
test.C:7: must specialize `struct A<int>' before defining member `void A<int>::g<X>(X)'
===================
With gcc 2.96 20000518
g++ -v
Reading specs from /usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/2.96/specs
gcc version 2.96 20000518 (experimental)
/usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/2.96/cpp -lang-c++ -v -iprefix
/usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/2.96/ -D__GNUC__=2 -D__GNUG__=2
-D__GNUC_MINOR__=96 -D__GNUC_PATCHLEVEL__=0 -D__cplusplus -D__ELF__ -Dunix -Dlinux -D__ELF__
-D__unix__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS -Acpu(i386)
-Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_i386__ /tmp/@22151.1 /tmp/ccWZ6dt3.ii
GNU CPP version 2.96 20000518 (experimental) (cpplib)
(i386 Linux/ELF)
ignoring nonexistent directory `/tmp/gcc-20000518-root/usr/local/include/g++-3'
ignoring nonexistent directory
`/tmp/gcc-20000518-root/usr/local/lib/gcc-lib/i386-pc-linux-gnu/2.96/include'
ignoring nonexistent directory `/tmp/gcc-20000518-root/usr/local/i386-pc-linux-gnu/include'
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include/g++-3
/usr/local/lib/gcc-lib/i386-pc-linux-gnu/2.96/include
/usr/local/i386-pc-linux-gnu/include
/usr/local/include
/usr/include
End of search list.
/usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/2.96/cc1plus /tmp/ccWZ6dt3.ii -quiet -dumpbase
@22151.cc -version -o /tmp/ccMhDVOY.s
GNU C++ version 2.96 20000518 (experimental) (i386-pc-linux-gnu) compiled by GNU C version 2.96
20000518 (experimental).
/tmp/@22151.1: In instantiation of `A':
/tmp/@22151.1:9: instantiated from here
/tmp/@22151.1:2: Internal compiler error.
/tmp/@22151.1:2: Please submit a full bug report.
/tmp/@22151.1:2: See
for instructions.
--
Mathias Doreille
doreille@imacpc34.epfl.ch IMAC-DGC-EPF
tel: +41-(0)21-693 2457 1015 Lausanne
fax: +41-(0)21-693 4748 Switzerland