function templates, overloads und default parameter

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
kaiserludi
Establishment
Beiträge: 467
Registriert: 18.04.2002, 15:31

function templates, overloads und default parameter

Beitrag von kaiserludi »

Moin.

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.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da
:)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: function templates, overloads und default parameter

Beitrag von CodingCat »

kaiserludi hat geschrieben: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?
Weil es kein Aufruf des Template-Overloads ist. Welchen Typ sollte er denn für FType2 deduzieren? ;)

Im Übrigen wird das Default-Argument nie in der Deduktion berücksichtigt, selbst wenn es einen unabhängigen Typ hat. Ab C++11 kannst du für FType2 immerhin einen Default-Typen angeben.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
kaiserludi
Establishment
Beiträge: 467
Registriert: 18.04.2002, 15:31

Re: function templates, overloads und default parameter

Beitrag von kaiserludi »

CodingCat hat geschrieben:Welchen Typ sollte er denn für FType2 deduzieren? ;)
Stimmt, das ist ein Argument.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da
:)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
Antworten