Add a constructor explicit Bar::Bar(const callback&). explicitprevent errors associated with automatic conversion.
Even better, if it Baris an aggregate, you can use a parenthesis initializer:
Foo::Foo(const callback& cb)
: m_ptr(std::make_shared<Bar>(Bar{cb}))