This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Explicity template specialization issue
- From: "himanshu.gupta" <himanshu12 dot g at tcs dot com>
- To: gcc-help at gcc dot gnu dot org
- Date: Tue, 20 Sep 2011 22:22:56 -0700 (PDT)
- Subject: Explicity template specialization issue
Hi,
The following code is giving errors while compiling with GCC 4.5.
Header File: declaration of template class.
namespace public
{
template<class T>
class Z
{
}; //Z
template<class ABC>
class X
{
protected:
template<class T>
class Y: public Z<T>
{
void MyFunc( X<ABC>& base )
{
do somthing...;
}
}; //Y
// Explicit specialization for "void" class.
template<>
class Y<void>: public Z<void>
{
void MyFunc( X<ABC>& base )
{
do somthing else...;
}
}; //Y explicit specialization
template<typename T> friend class Y;
}; //X
} // public
The above explicit inner class declaration for "void" is giving errors...
Errors for the line after the code comment of Explicity specialization):
error: explicit specialization in non-namespace scope 'class public::X<ABC>'
error: 'ABC'
Error for line with friend class declaratoin:
error: too many template-parameter-lists
The written code was very old and it has been compiled under Linux in the
past. I'm wondering if an older version of GCC supported this, or whether it
is GCC supported extension that can be switched on to compile it
successfully. Did anyone has faced the similar issue? Could you please guide
me how can I resolve this? Is there any compiler option that still allows to
work this syntax?
Note that the C++ standard says you cannot specialise the inner template
without specialising the outer template. But I can not declare/define inner
template class Y outside as it is using the outer template class parameter
for the function.
--
View this message in context: http://old.nabble.com/Explicity-template-specialization-issue-tp32503712p32503712.html
Sent from the gcc - Help mailing list archive at Nabble.com.