source.cpp: In instantiation of 'void easynet::async_write(easynet::shared_buffer, size_t, F&&) [with F = main()::__lambda0; size_t = long unsigned int]':
source.cpp:94:4: required from here
source.cpp:80:55: error: no matching function for call to 'alloc_job(easynet::shared_buffer&, size_t&, main()::__lambda0&)'
auto item = detail::alloc_job(buffer, size, handler); // bad
^
source.cpp:80:55: note: candidates are:
source.cpp:53:15: note: template<class D, class F> easynet::detail::jobitem_base* easynet::detail::alloc_job(typename easynet::detail::ref_val_wrapper<D>::type, F&&)
jobitem_base* alloc_job(typename ref_val_wrapper<D>::type, F&&) {
^
source.cpp:53:15: note: template argument deduction/substitution failed:
source.cpp:80:55: note: candidate expects 2 arguments, 3 provided
auto item = detail::alloc_job(buffer, size, handler); // bad
^
source.cpp:61:15: note: template<class D, class F> easynet::detail::jobitem_base* easynet::detail::alloc_job(typename easynet::detail::ref_val_wrapper<D>::type, std::size_t, F&&)
jobitem_base* alloc_job(typename ref_val_wrapper<D>::type, std::size_t, F&&) {
^
source.cpp:61:15: note: template argument deduction/substitution failed:
source.cpp:80:55: note: couldn't deduce template parameter 'D'
auto item = detail::alloc_job(buffer, size, handler); // bad
^
проблема в использовании detail::alloc_job(), которая перегружена для двух и трех аргументов.
в этом примере, я пытаюсь использовать detail::alloc_job() с тремя аргументами. и мне не понятно, почему компилятор видит неоднозначность тут?
спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>(хз, как тут впихнуть кат)
[cut] бла-бла [\cut]
X>проблема в использовании detail::alloc_job(), которая перегружена для двух и трех аргументов. X>в этом примере, я пытаюсь использовать detail::alloc_job() с тремя аргументами. и мне не понятно, почему компилятор видит неоднозначность тут?
тут нет неоднозначности, тут есть проблема вывода типа
даже сообщение есть:
Здравствуйте, uzhas, Вы писали:
U>тут нет неоднозначности, тут есть проблема вывода типа
ну да.
U>вам нужно подсказать тип
понятно.
но почему компилятор неможет вывести тип?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Тут identity<_Ty> не несет никакой смысловой нагрузки, и нужен только для того, чтобы заблокировать вывод типа и заставить явно указать тип аргумента шаблона.
Если тут не использовать identity<_Ty>, и компилер сам бы выводил тип из аргумента, то forward во всех случаях (если тип явно не указан) работал бы как std::move, т.е. неправильно.
Здравствуйте, rus blood, Вы писали:
RB>Тут identity<_Ty> не несет никакой смысловой нагрузки, и нужен только для того, чтобы заблокировать вывод типа и заставить явно указать тип аргумента шаблона. RB>Если тут не использовать identity<_Ty>, и компилер сам бы выводил тип из аргумента, то forward во всех случаях (если тип явно не указан) работал бы как std::move, т.е. неправильно.
понял.
вопрос закрыт. всем спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)