In C++ 17 wir ungefähr wieC++ Vorlage Klasse Abzug (P0091R0) für Funktionsargumente
std::pair p = {1,3}; // compiler deduces template parameters to pair<int,int>
Aus der Dokumentation zu cppreference tun kann ich verstehen, dass das Folgende nicht:
template<class T1, class T2>
void bar(std::pair<T1,T2>)
{}
void foo()
{
bar({1,3}); // No deduction of pair template arguments
}
Kann das jemand bestätigen und einen Einblick geben, warum das nicht funktioniert? Technisch sollte das funktionieren, oder? Gab es irgendwelche Diskussionen, um diese Arbeit zu machen, oder ist es eine Art Aufsicht?
Denken Sie darüber nach - wir müssen wissen, welcher Konstruktor mit den geschweiften Klammern verwendet wird, aber um zu wissen, welcher zu verwenden ist, müssen wir den Typ kennen, aber wir kennen den Typ nicht, bis wir den Konstruktor finden (die Konstruktoren können sein für jede Typensubstitution unterschiedlich dank expliziter Spezialisierung) – milleniumbug
@milleniumbug Dieses Argument würde genauso für den normalen Deklarationsfall gelten - Spezialisierungen werden nicht berücksichtigt. – Barry
@Barry Außer im Fall der Funktionsvorlage haben Sie mehrere mögliche Ziele und die Liste der Vorlagenparameter kann beliebig kompliziert sein. –