This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

member template partial specialisation



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 
    
                    

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]