struct X
{
X(X&); // (1)
X(X&&); // (2)
X(const X&); // (3)
X(const X&&); // (4)
};
これらの4つのコンストラクターの1つがバインドされてディスパッチされる場所のすべての可能な使用法のセットUを検討してください。X
たとえば、Uの1つの要素は次のとおりです。
int main()
{
X x1 = ...;
X x2(x1); // <-- (1) used
}
ここで、次のように5番目のコンストラクターを追加するとします。
struct X
{
X(X&); // (1)
X(X&&); // (2)
X(const X&); // (3)
X(const X&&); // (4)
template<class T> X(T&&); // (5)
};
Uの要素の1つが、、、または以前のように、より適切に一致するようにディスパッチされる新しいオーバーロード解決策はあり(5)
ますか?(1)
(2)
(3)
(4)