Specjalizacja szablonów funkcyjnych na wskaźnikach funkcji

Mam funkcję oczyszczania, którą chcę uruchamiać tylko na (tradycyjnych) typach wskaźników.

Moim problemem są szablony funkcji, które potrafię ograniczyć do funkcji tylko wskaźniki, jednak z powodu różnicowania reguł między wskaźnikami funkcji i zwykłymi wskaźnikami napotykam problemy.

TheSanitize() funkcja musi działać na całą masę typów, z których niektóre są wskaźnikami i muszą zostać oczyszczone, a inne są wskaźnikami funkcji o różnym typie i typami parametrów i nie powinny być oczyszczane, a niektóre z nich są typami danych innych niż wskaźniki które również nie powinny być oczyszczane.

Coś oczywistego, którego brakuje?

  template<typename T>
  T* Sanitize(T* value)
  {
     return (T*)SanitizePointer(value);  //SanitizePointer returns void*, so cast is necessary
  }

  template<typename T>
  T Sanitize(T value)
  {
     return value;  //Non-pointers can be passed without sanitization
  }

  int main()
  {

     int  a;
     int* b;
     int (*c)();

     Sanitize(a);
     Sanitize(b);
     Sanitize(c);   //<- ERROR

     return 0;
  }

questionAnswers(5)

yourAnswerToTheQuestion