Ich habe keine Ahnung, warum Compiler mir Warnungen über Template Instanziierungen gibt.Std :: Forward mit Template überladen Funktion
Das ist ein Stück Code, der einfach gut läuft und gibt lvalue/R-Wert richtig:
//template<typename T>
void overloaded(const /*T*/std::string& in)
{
std::cout << "lvalue" << std::endl;
}
//template<typename T>
void overloaded(/*T*/std::string&& in)
{
std::cout << "rvalue" << std::endl;
}
template<typename T>
void pass(T&& in)
{
overloaded(std::forward<T>(in));
}
int main()
{
std::string a;
pass(a);
pass(std::move(a));
getchar();
}
Aber ich brauche es mit Templat-Typ zu verwenden. So Modifizierung der „überlastet“ Funktionen
template<typename T>
void overloaded(const T& in)
{
std::cout << "lvalue" << std::endl;
}
template<typename T>
void overloaded(T&& in)
{
std::cout << "rvalue" << std::endl;
}
Gibt Warnungen Vorlage instantiations, (wenn mir seine klare T std werden sollte :: string) und Konsole ausgibt rvalue 2mal statt lvalue zuerst.
Was mache ich falsch?
Funktioniert für mich. http://coliru.stacked-crooked.com/a/fc00c140c9a8e208 – erip
'T &&' ist eine Forwarding-Referenz, dh wenn 'T' ein Typ Template-Parameter ist, ist es nicht mehr ein regulärer Rvalue-Referenz –