For example we have some class with its ptr
typedef shared_ptr<Foo> FooPtr;
Foo.h: error C2371: 'FooPtr' : redefinition; different basic types
1> another.h(7) : see declaration of 'FooPtr'
Yes, it should be totally possible, because
shared_ptr is designed to be safe version of a pointer and pointers to incomplete types are allowed (just like references).
So yes, you can remove this dependency and replace body of
Foo (or include of its header) with simple forward declaration:
class Foo; typedef shared_ptr<Foo> FooPtr;