Почему мой конструктор преобразования не работает? Явное преобразование компилируется отлично.Почему неявное преобразование не встречается
struct element {};
struct element_set {
element_set(const element& e) : e(e) {};
element_set& operator+(const element& e) { return *this; }
const element &e;
};
element e1, e2;
auto es1 = element_set(e1) + e2;
auto es2 = e1 + e2;
kent:kas kent$ g++ -std=c++14 -g implicit.cc
implicit.cc:13:15: error: invalid operands to binary expression ('element' and 'element')
auto es2 = e1 + e2;
~~^~~
1 error generated.
На основании ответа от @Krizz и комментарий от @BenVoigt ниже, я могу получить неявное преобразование работает, добавив друга element_set:
struct element_set {
element_set(const element& e) : e(e) {};
element_set& operator+(const element& e) { return *this; }
friend element_set operator+(const element& l, const element& r);
const element &e;
};
element_set operator+(const element& l, const element& r) { return l+r; }
Спасибо за быструю помощь!
Определенные пользователем преобразования не работают с аргументом неявного объекта. –
'operator +' не должен быть функцией-членом. Попробуйте как функцию друга (с двумя аргументами) ... –
'operator +' возврат ссылки - плохая идея тоже –