L'uscita del seguente programma ...Costruttore modello che ha la precedenza su Costruttore copia e sposta normale?
#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);
}
è
tmpl
tmpl
L'output desiderato è:
tmpl
copy
Perché non il costruttore di copia concreta prendono la precedenza sul costruttore di modelli?
C'è comunque un modo per risolvere il problema in modo che i sovraccarichi del costruttore di copia e spostamento abbiano la precedenza sul costruttore di template?
Ecco la classe finale relativo a questa domanda: http://codereview.stackexchange.com/questions/20058/a-c11-any-class –