This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
c++/350: out-of-line definitions of specialized template methods rejected.
- To: gcc-gnats at gcc dot gnu dot org
- Subject: c++/350: out-of-line definitions of specialized template methods rejected.
- From: llewelly at dbritsch dot dsl dot xmission dot com
- Date: 27 Jun 2000 04:44:47 -0000
- Reply-To: llewelly at dbritsch dot dsl dot xmission dot com
- Resent-Cc: gcc-prs at gcc dot gnu dot org, jason at gcc dot gnu dot org
- Resent-Reply-To: gcc-gnats@gcc.gnu.org, llewelly@dbritsch.dsl.xmission.com
>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: