Почему я не получаю известную ошибку преобразования?

У меня есть такой код:
Ссылка на Wandbox

Когда я пытаюсь скомпилировать его, я получаю это:

./type_holder.h:45:14: error: no matching constructor for initialization of 'test_class'
return new T(args...);
^ ~~~~
./type_holder.h:54:35: note: in instantiation of member function 'di::DiConstructor<true, test_class, di::DiMark &&, di::AnyResolver>::construct' requested
here
decltype(AnyResolver())>::construct(std::move(DiMark{}), AnyResolver{});
^
test.cc:26:19: note: in instantiation of function template specialization 'di::ConstructIfPossible<test_class>' requested here
std::cout << di::ConstructIfPossible<test_class>() << std::endl;
^
test.cc:14:9: note: candidate constructor not viable: no known conversion from 'di::DiMark' to 'di::DiMark &&' for 1st argument
INJECT(test_class, int* a) {}
^
./inject_markers.h:6:36: note: expanded from macro 'INJECT'
#define INJECT(name, ...) explicit name(di::DiMark&& m, __VA_ARGS__)
^
test.cc:12:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
class test_class {
^
test.cc:12:7: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided
1 error generated.

Вопрос в том, что я делаю не так? Почему компилятор говорит мне, что я пытаюсь конвертировать DiMark в DiMark&&? Разве это не должно быть DiMark&& уже с тех пор как я std::move(DiMark) {} явное преобразование lvalue в rvalue?

-1

Решение

Что ошибки говорят вам, что вы пытаетесь построить test_class объект с использованием двухпараметрического конструктора, но вы не определили его.

Существует два неявно определенных конструктора, которые принимают один параметр (конструктор копирования и конструктор перемещения). Тем не менее, так как вы пытаетесь построить test_class объект как с DiMark а также AnyResolver аргументы, и этот конструктор не существует, вы получите ошибку.

Чтобы решить эту проблему, вам нужно создать конструктор с двумя параметрами. (И тогда вам может понадобиться определить конструкторы копирования и перемещения, поскольку неявные конструкторы не будут определены, если вы определите какие-либо другие конструкторы.)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]