ОБНОВЛЕНИЕ внизу.
Я хочу, чтобы make void tree::operator = ( tree t ) использовал значение rvalue one (в этом случае, как правило, я хочу обрабатывать их по-разному из-за эффективности)
Я закодировал его, использовал std::move, чтобы убедиться, что он будет использовать rvalue, но компилятор говорит, что не знает, какой оператор выбрать. Разве он не должен выбрать это, используя rvalue?
Код:
void tree::operator = ( tree&& t )
{
std::swap(this->pntr, t.pntr);
}
void tree::operator = ( tree t )
{
*this = std::move(t);
}
Ошибка компилятора:
tree.cpp:23:9: error: use of overloaded operator '=' is ambiguous (with operand types 'tree' and 'typename remove_reference<tree &>::type' (aka 'tree'))
*this = std::move(t);
~~~~~ ^ ~~~~~~~~~~~~
tree.cpp:16:12: note: candidate function
void tree::operator = ( tree&& t )
^
tree.cpp:21:12: note: candidate function
void tree::operator = ( tree t )
^
1 error generated.
Я использую clang-503.0.38. (но с gcc 4.8 такая же ошибка)
ОБНОВЛЕНИЕ
Хорошо, теперь у меня есть:
tree& tree::operator = ( tree&& t )
{
std::swap(this->pntr, t.pntr);
}
tree& tree::operator = ( const tree & t )
{
*this = tree(t); // tree:tree( const tree& t )
}
И это работает. Завтра я опубликую то, что я узнал из этого, как ответ.