Explicit specialization problem
Nathan Sidwell
nathan@codesourcery.com
Fri Nov 26 09:25:00 GMT 2004
Yogesh Kini wrote:
> Hi,
> When I compile the below code using gcc 3.3 I get the errors as below.
> But MS VC++ compiles it straight. Can any one please tell me what the problem is?
>
> Thanks,
> Yogesh
>
> namespace xyz
> {
> template<class A, class B, class C>
> class ABC
> {
> template<bool T>
> struct M
> {
> float a,b,c;
> };
>
> template<>
> struct M<true> -> Error here
> {
> int i,j,k;
> };
> };
>
> };
This is ill-formed. For two reasons
1) [14.7.3]/2 says an explicit specialization of a member template shall
be declared in the namespace of the enclosing class. I.e. you
have to move the M<true> specialization out.
2) [14.7.3]/18 says that an explicit specialization of a member class template
of a templated class must also specialize the outer class. I.e. you
cannot put a specialized class inside a non-specialized class.
nathan
--
Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC
nathan@codesourcery.com :: http://www.planetfall.pwp.blueyonder.co.uk
More information about the Gcc-help
mailing list