especialización explícita de la función miembro de clase de plantilla

Necesito especializar la función de miembro de plantilla para algún tipo (digamosdobl). Funciona bien mientras que la claseX en sí no es una clase de plantilla, pero cuando la hago, GCC comienza a dar errores en tiempo de compilación.

#include <iostream>
#include <cmath>

template <class C> class X
{
public:
   template <class T> void get_as();
};

template <class C>
void X<C>::get_as<double>()
{

}

int main()
{
   X<int> x;
   x.get_as();
}

Aquí está el mensaje de erro

source.cpp:11:27: error: template-id
  'get_as<double>' in declaration of primary template
source.cpp:11:6: error: prototype for
  'void X<C>::get_as()' does not match any in class 'X<C>'
source.cpp:7:35: error: candidate is:
  template<class C> template<class T> void X::get_as()

¿Cómo puedo solucionar eso y cuál es el problema aquí?

Gracias por adelantado

Respuestas a la pregunta(2)

Su respuesta a la pregunta