Code: Alles auswählen
class Foo
{
public:
static void foo(int* param);
template<typename FType1, typename FType2> static void foo(const FType1& param1, const FType2& vparam2=FType2());
};
Code: Alles auswählen
int main(void)
{
Foo::foo(2);
}
"error C2664: cannot convert parameter 1 from 'int' to 'int *'"
Wieso bemerkt der Compiler hier nicht, dass das ein Aufrug zum Template-Overload und nicht zum Non-Template-Overload ist und dass die parameter dank dem Defaultwert für param2 dort passen?
Wenn ich einen weiteren Overload template<typename FType> static void foo(const FType& param); hinzufüge, dann kommt der Compiler mit dem Aufruf klar. Eigentlich sollte er doch aber nun einen Disabiguation Fehler schmeißen, weil das erste Template mit defaultvalue die gleiche Signatur hat wie das 2.