Nö, shadowed nicht. Würde ich behaupten. Die Basisklasse ist doch klar definiert, die Signatur identisch, und schlussendlich würde der Compiler dank
override meckern, wenn das nur ein Shadowing wäre. Ich gehe mal von C++11 aus, korrekt? Weil VC++ auch vorher schon
override unterstützt hat, da aber mit subtil abweichender Funktionsweise, wenn ich mich recht erinnere.
Für mich sieht das eher danach aus, als hättest Du eine schlichte Parameter-Verwirrung. Die Funktion erwartet *ein* Argument, nämlich ein
std::pair. Du gibst ihm *zwei* Argumente, nämlich zwei
int. Im einfachsten Fall würde eine
initializer_list das Problem lösen, also ein schlichtes:
|
Quellcode
|
1
|
bar.test( {1, 2} );
|
Ohne es getestet zu haben. Wenn's nicht geht, dann halt explizit
std::make_pair(1, 2).
[edit] Habe gerade mal Deinen Link ausprobiert: Du hast außerdem das Problem, dass die Funktion
Bar<T>::test() nicht
public ist. Wenn ich das in Deinem Code-Beispiel korrigiere und ein {} um die Aufrufparameter setze, kompiliert und läuft es sauber.
[edit] Ups, alles Quatsch. Deine Basisklassen-Funktion nimmt zwei ints, die Funktion in Deiner abgeleitete Klasse ein std::pair<>. Das ist in der Tat ein ganz banales Shadowing.