Ich experimentierte mit Vorlagen und Weiterleitung. Ich habe einen einfachen experimentellen Code geschrieben, der mich überrascht hat. Ich möchte diesen Mechanismus besser verstehen, wahrscheinlich fehlt mir hier etwas Wissen und darum bitte ich um Hilfe. Könntest du mir bitte erklären, warum die beiden Aufrufe in dem unten stehenden Code nicht kompiliert werden (PLATZ 2 und 3)?Weiterleitung von Parametern von Vorlagen zu Funktionen verschiedener Typen
#include <iostream>
#include <memory>
#include <utility>
using namespace std;
void h2rvalref(int&& i) { cout << "h2rvalref" << endl; }
void h2ref(int& i) { cout << "h2ref" << endl; }
void h2val(int i) { cout << "h2val" << endl; }
template <class T, class X>
void h1(T&& t, X x) { x(forward<T>(t)); }
int main()
{
// PLACE (1)
h1<int, decltype(h2rvalref)>(1, h2rvalref);
auto b = 1;
// PLACE (2)
// h1<int, decltype(h2ref)>(b, h2ref); // --> ERROR - no matching function..., cannot convert 'b' (type 'int') to type 'int&&'
// PLACE (3)
// h1<int, decltype(h2val)>(b, h2val); // --> ERROR - no matching function..., cannot convert 'b' (type 'int') to type 'int&&'
}
Ich verstehe nicht, warum der Fehler sagt etwas über int Umwandlung in int & &, wenn ich Wert b vom Typ int.
Kommentieren Sie nicht den Code, nach dem Sie fragen. Die Syntaxhervorhebung erschwert das Lesen. – Barmar
Ok, daran werde ich mich erinnern. – YotKay