The following code gives me segfault. But if `foo_ptr` is `foo*` it works fine.

    #include <vector>
    #include <boost/range/adaptor/indirected.hpp>
    #include <boost/range/adaptor/transformed.hpp>
    #include <boost/range/algorithm/for_each.hpp>
    #include <boost/bind.hpp>
    #include <boost/shared_ptr.hpp>

    struct foo{
        foo(int _i):
            i(_i){}
        virtual void bar() const{
             std::cout << "foo::bar::i " << i << std::endl;
        }
        int i;
    };

    typedef boost::shared_ptr<foo> foo_ptr;
    //typedef foo* foo_ptr;
    foo_ptr trasform(int i){
        return foo_ptr(new foo(i));
    }
    int main(){
        std::vector<int> vec;
        vec.push_back(1);

        using namespace boost::adaptors; using boost::bind;
        boost::for_each(vec
                        | transformed(bind(&trasform, _1))
                        | indirected,
     bind(&foo::bar, _1));
    }
Is it expected behavior of adaptors ?