Der Ausgang des folgenden Programms ...Vorlagenkonstruktor, der Vorrang vor normalem Konstruktor zum Kopieren und Verschieben hat?
#include <iostream>
using namespace std;
struct X
{
X(const X&) { cout << "copy" << endl; }
X(X&&) { cout << "move" << endl; }
template<class T> X(T&&) { cout << "tmpl" << endl; }
};
int main()
{
X x1 = 42;
X x2(x1);
}
ist
tmpl
tmpl
Die gewünschte Ausgabe ist:
tmpl
copy
Warum das nicht der konkrete Copykonstruktor haben Vorrang vor Vorlagenkonstruktor?
Gibt es trotzdem eine Korrektur, damit die Überladungen des Kopier- und Verschiebungskonstruktors Vorrang vor dem Vorlagenkonstruktor haben?
Hier ist die letzte Klasse zu dieser Frage: http://codereview.stackexchange.com/questions/20058/a-c11-any-class –