This is the mail archive of the gcc-prs@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]

c++/350: out-of-line definitions of specialized template methods rejected.



>Number:         350
>Category:       c++
>Synopsis:       out-of-line definitions of specialized template methods rejected.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Mon Jun 26 21:46:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     llewelly@dbritsch.dsl.xmission.com
>Release:        gcc version 2.96 20000619 (experimental), gcc 2.95.2
>Organization:
>Environment:
i686-pc-linux-gnu, binutils 2.9.5.0.41, glibc-2.1.2
>Description:
A specialized out=of-line definition of a member function of specialized templated class is rejected.
>How-To-Repeat:
//The following code:


template <typename T>
class MyClass
{
public:
typedef T               value_type;

public:
  MyClass(value_type initial);

};

template <typename T>
MyClass<T>::MyClass(value_type initial)
{
// This space intentionally left blank
}



template<>
class MyClass<int>
{
public:
typedef int value_type;

public:
MyClass(value_type initial );

};


template <>
MyClass<int>::MyClass(value_type initial)
{
// This space intentionally left blank
}


/*
gives:
{~/cc_exer}/usr/local/gcc-cvs/bin/g++ -v -g -Wall out_of_line_template_specializations.cc 
Reading specs from /usr/local/gcc-cvs/bin/../lib/gcc-lib/i686-pc-linux/2.96/specs
gcc version 2.96 20000619 (experimental)
 /usr/local/gcc-cvs/bin/../lib/gcc-lib/i686-pc-linux/2.96/cpp -lang-c++ -v -iprefix /usr/local/gcc-cvs/bin/../lib/gcc-lib/i686-pc-linux/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 -g -Wall -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_pentiumpro__ out_of_line_template_specializations.cc /tmp/ccjBvJug.ii
GNU CPP version 2.96 20000619 (experimental) (cpplib)
 (i386 Linux/ELF)
ignoring duplicate directory `/usr/local/gcc-cvs/include/g++-v3'
ignoring duplicate directory `/usr/local/gcc-cvs/lib/gcc-lib/i686-pc-linux/2.96/include'
ignoring duplicate directory `/usr/local/gcc-cvs/i686-pc-linux/include'
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/gcc-cvs/include/g++-v3
 /usr/local/gcc-cvs/lib/gcc-lib/i686-pc-linux/2.96/include
 /usr/local/gcc-cvs/i686-pc-linux/include
 /usr/local/include
 /usr/include
End of search list.
 /usr/local/gcc-cvs/bin/../lib/gcc-lib/i686-pc-linux/2.96/cc1plus /tmp/ccjBvJug.ii -quiet -dumpbase out_of_line_template_specializations.cc -g -Wall -version -o /tmp/ccCb3rxm.s
GNU C++ version 2.96 20000619 (experimental) (i686-pc-linux) compiled by GNU C version 2.96 20000619 (experimental).
out_of_line_template_specializations.cc:34: template-id `MyClass<>' for `MyClass<int>::MyClass (int)'
does not match any template declaration
out_of_line_template_specializations.cc:34: syntax error before `{'
  
*/
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:

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