次のプログラムの出力...
#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
望ましい出力は次のとおりです。
tmpl
copy
具体的なコピー コンストラクターがテンプレート コンストラクターよりも優先されないのはなぜですか?
コピー コンストラクターとムーブ コンストラクターのオーバーロードがテンプレート コンストラクターよりも優先されるように修正する方法はありますか?