Unlike most(?) smart pointers, boost::intrusive_ptr has a non-explicit constructor. Given that, one could writetypedef boost::intrusive_ptr<Foo> FooPtr;FooPtr MyFactory(){    return new Foo(a, b, c);}Or one could writeFooPtr MyFactory(){    return FooPtr(new Foo(a, b, c));}The latter is more consistent with how the code would have to be written if FooPtr were another kind of smart pointer, like shared_ptr or unique_ptr. The former is more concise. I personally prefer concise as long as it doesn't lead to trouble for readers and maintainers later. I'm wondering whether the former case is too concise?
Which is the better way to return a new instance of a boost intrusive_ptr
c++