Ich habe den folgenden Code:Warum werden Operator-Konvertierungen nicht implizit für Template-Funktionen aufgerufen? (C++)
template <class T>
struct pointer
{
operator pointer<const T>() const;
};
void f(pointer<const float>);
template <typename U>
void tf(pointer<const U>);
void g()
{
pointer<float> ptr;
f(ptr);
tf(ptr);
}
Wenn ich den Code zu kompilieren mit gcc 4.3.3 ich eine Nachricht bekommen (aaa.cc:17: error: no matching function for call to ‘tf(pointer<float>&)’
), das anzeigt, dass der Compiler 'operator pointer<const T>'
für die Nicht-Template-Funktion f() aufgerufen , aber nicht für die Template-Funktion tf(). Warum und gibt es einen Workaround kurz vor dem Überladen von tf() mit einer const und non-const Version?
Vielen Dank im Voraus für jede Hilfe.
vielleicht entfernt die stackoverflow-Software die spitzen Klammern Ihrer Vorlage? – jonner