template-id no coincide con ninguna delcaración de plantilla

Recibo un error de comstackción frustrante que no puedo solucionar. Tiene que ver con la especialización de plantillas, pero no puedo ver lo que está mal …

../../include/thread/lock_guard.inl:23: error: template-id 'lock_guard' for 'thread::lock_guard::lock_guard(thread::null_mutex&)' does not match any template declaration ../../include/thread/lock_guard.inl:23: error: invalid function declaration ../../include/thread/lock_guard.inl:29: error: template-id 'lock_guard' for 'thread::lock_guard::~lock_guard()' does not match any template declaration ../../include/thread/lock_guard.inl:29: error: invalid function declaration 

El código es el siguiente:

  #include "thread/mutex.hpp" namespace thread { template  class lock_guard { public: lock_guard(T& lock); ~lock_guard(); private: mutable T& m_lock; mutable int m_state; }; template  class lock_guard { public: lock_guard(null_mutex&); ~lock_guard(); }; } //namespace #include "thread/lock_guard.inl" ------------------------------------ #include "thread/lock_guard.hpp" namespace thread { template  lock_guard::lock_guard(T& lock) : m_lock(lock), m_state(lock.lock()) { /* do nothing */ } template  lock_guard::~lock_guard() { if(0 == m_state) { m_lock.unlock(); } } template  lock_guard::lock_guard(null_mutex&) { /* do nothing */ } template  lock_guard::~lock_guard() { /* do nothing */ } } //namespace 

Una especialización de plantilla de clase completa ya no es una plantilla, es una clase regular. Por lo tanto, no necesita la plantilla <> al definir sus miembros:

 lock_guard::lock_guard(null_mutex&) { /* do nothing */ } lock_guard::~lock_guard() { /* do nothing */ } 

Quizás no sea la causa del error, pero no necesita el código de especialización en el archivo de encabezado.