c++ - Deduce weak_ptr argument from shared_ptr -


the following gives me compiler error:

could not deduce template argument 'const std::weak_ptr<_ty> &' 'std::shared_ptr'

#include <memory>  class foo { public:      template<typename r>     void bar(std::weak_ptr<r> const & p)     {         p;     } };  int main(void) {     auto foo = foo();     auto integer = std::make_shared<int>();      foo.bar(integer); } 

i tried,

template<typename r> void bar(std::weak_ptr<r::element_type> const & p) {  } 

, seems syntatically incorrect. following works wondered if it's possible conversion in p, without creating temporary?

template<typename r> void bar(r const & p) {     auto w = std::weak_ptr<r::element_type>(p); } 

to clear i'd explicitly state function should take shared or weak_ptr, don't r const & p solution.

for completeness works of course:

template<typename r> void bar(std::shared_ptr<r> const & p) {     auto w = std::weak_ptr<r>(p); } 

the template parameter r of std::weak<r> cannot deduced instance of std::shared_ptr<a> because converting constructor (which takes std::shared_ptr<y>) constructor-template meansy — , there no way deduce r y (which deduced a). have @ converting constructor.

you write this:

template<typename t> auto make_weak(std::shared_ptr<t> s) ->  std::weak_ptr<t> {   return { s }; } 

then call as:

foo.bar( make_weak(integer) ); 

Comments

Popular posts from this blog

css - SVG using textPath a symbol not rendering in Firefox -

Java 8 + Maven Javadoc plugin: Error fetching URL -

order - Notification for user in user account opencart -