Неоднозначный вызов функции при наличии перегрузки Reference и Value. - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть следующий класс:

template<typename T>
class List {

    void Add(T& item) {//GOOD STUFF}
    void Add(T item) {//More STUFF}
    void Remove(T item) {//STUFF}
};

Я пытаюсь использовать его следующим образом

List<MyClass> list;
MyClass obj;
list.Add(obj); //Here the compiler gets angry :((

Что касается вопроса, я уже нашел следующие три SO вопроса, ноЯ до сих пор не в состоянии назвать любого из методов.
1008 * Неоднозначный вызов с опорной функцией перегружено г-значением
1011 * вызов функции неоднозначности с указателем, ссылкой и постоянным опорным параметром
Неоднозначные версии функций / значений / значений

1 Ответ

0 голосов
/ 08 декабря 2018

Неопределенно, какую функцию вы собираетесь вызывать, потому что любое l-значение, передаваемое в качестве аргумента функции, может быть неявно преобразовано в ссылку, поэтому неоднозначность неизбежна, как сказано в Перегрузка функции на основе значенияСравнение с Const Reference .

Вы можете изменить это:

void Add(T item) {}

на это:

void Add(T&& item) {}

Живая демоверсия

...