Ryan Ryan - 1 year ago 152
C++ Question

GCC error: explicit specialization in non-namespace scope

I am trying to port the following code. I know the standard doesn't allow explicit specialization in non-namescape scope and I should use overloading, but I just can't find a way to apply this technique in this particular case.

class VarData
{
public:
template < typename T > bool IsTypeOf (int index) const
{
return IsTypeOf_f<T>::IsTypeOf(this, index); // no error...
}

template <> bool IsTypeOf < int > (int index) const // error: explicit specialization in non-namespace scope 'class StateData'
{
return false;
}

template <> bool IsTypeOf < double > (int index) const // error: explicit specialization in non-namespace scope 'class StateData'
{
return false;
}
};

Answer Source

You just have to move your specializations of the member templates outside of the class body.

class VarData
{
public:
    template < typename T > bool IsTypeOf (int index) const
    {
        return IsTypeOf_f<T>::IsTypeOf(this, index);
    }
};

template <> bool VarData::IsTypeOf < int > (int index) const
{
    return false;
}

template <> bool VarData::IsTypeOf < double > (int index) const
{
    return false;
}
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download