Compilerfehler C3066

Es gibt mehrere Möglichkeiten, ein Objekt dieses Typs mit diesen Argumenten aufzurufen

Der Compiler hat einen mehrdeutigen Funktionsaufruf gefunden, der Surrogate beinhaltet.

Im folgenden Beispiel wird C3066 generiert:

// C3066.cpp
template <class T, class U> void func(T*, U*){}

typedef void (*PF)(const int*, const char*);
typedef void (*PF1)(const int*, volatile char*);

struct A {
   operator PF() const {
      return func;
   }

   operator PF1() {
      return func;
   }

   operator PF1() const  {
      return func;
   }

};

int main() {
   A a;
   int i;
   char c;

   a(&i, &c);   // C3066
   a(&i, (const char *) &c);   // OK
}