Так как вы хотите специализировать параметры шаблона класса, то придётся специализировать весь класс:
template <typename Node, typename DataType>
class List
{
Node *head, *tail;
int count;
public:
// ...
void AddHead(DataType data);
};
template <typename Node>
class List<Node, Storage_device*>
{
using DataType = Storage_device*;
Node *head, *tail;
int count;
public:
// ...
void AddHead(DataType data);
};
Теперь для этой специализации класса получится определить AddHead, как у вас.
Можно обойтись без специализации всего класса, искусственно добавив шаблон в функцию:
template<typename = std::enable_if<std::is_same<DataType, Storage_device*>>::type>
void AddHead(DataType data); // specialized version
template<typename = std::enable_if<!std::is_same<DataType, Storage_device*>>::type>
void AddHead(DataType data); // general version
Правда, я давно не использовал std::enable_if, не гарантирую, что это работает.
template<typename Node, typename DataType>
class List {
//...
public:
template<typename = std::enable_if<std::is_same<DataType, Storage_device*>>::type>
void AddHead(DataType data);
template<typename = std::enable_if<!std::is_same<DataType, Storage_device*>>::type>
void AddHead(DataType data);
};
template<typename Node, typename DataType>
template<typename = std::enable_if<std::is_same<DataType, Storage_device*>>::type>
void List<Node, DataType>::AddHead(DataType data);
template<typename Node, typename DataType>
template<typename = std::enable_if<!std::is_same<DataType, Storage_device*>>::type>
void List<Node, DataType>::AddHead(DataType data);