modèle de spécialisation pour les fonctions membres statiques; howto?

Je suis en train de mettre en œuvre une fonction de modèle avec poignées vide différemment selon le modèle de la spécialisation.

Le code suivant me donne une "Explicite spécialisation dans le non-espace de noms de champ" dans gcc:

template <typename T>
static T safeGuiCall(boost::function<T ()> _f)
{
    if (_f.empty())
        throw GuiException("Function pointer empty");
    {
        ThreadGuard g;
        T ret = _f();
        return ret;
    }
}

//template specialization for functions wit no return value
template <>
static void safeGuiCall<void>(boost::function<void ()> _f)
{
    if (_f.empty())
        throw GuiException("Function pointer empty");
    {
        ThreadGuard g;
        _f();
    }
}

J'ai essayé de sortir de la classe (la classe n'est pas basé sur un modèle) et dans l'espace de noms mais puis-je obtenir le message d'erreur "Explicite la spécialisation ne peut pas avoir une classe de stockage". J'ai lu beaucoup de discussions à ce sujet, mais les gens ne semblent pas s'entendre sur la façon de se spécialiser fonction des modèles. Des idées?

OriginalL'auteur Rolle | 2009-04-20