¿Cómo simular una especialización parcial de funciones miembro seleccionadas basadas en un parámetro de plantilla que es un contenedor STL?

Estoy trabajando con una clase que usa contenedores STL como parámetro de plantilla. Sin embargo, no todos los contenedores proporcionan los mismos métodos, así que estoy tratando de descubrir cómo puedo especializar métodos específicos basados en el contenedor utilizado.

Ejemplo:

template<typename container>
class A
{
private:
    container m_container;
public:
    void foo(); // does something container specific

    // more generic methods that work with any container
};

El siguiente código no se compila diciendo "No se puede combinar la especialización del método", pero esto es aproximadamente lo que quiero lograr:

template<typename T>
template<>
void A<std::vector<T> >::foo()
{
    // vector specific implementation
}

template<typename T>
template<>
void A<std::map<T> >::foo()
{
    // map specific implementation
}

Tengo que admitir varios compiladores, incluidos MSVC2010, gcc C ++ 99, un antiguo compilador de Solaris ...

La única forma de evitar este fiasco que encontré fue implementar métodos externos que hagan lo que seafoo se supone que debe hacer y sobrecargarlos para los diferentes tipos de contenedores. Pero no quiero exponer esas funciones a nivel mundial, ¿hay alguna manera de hacerlo a través de especializaciones?

Un caso especial en el que no es posible externalizarlos es la especialización de constructores ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta