Не помещайте using namespace
в заголовки, так как вы обнаружили, что это может нарушить последующие заголовки, и поскольку вы не можете изменить эти заголовки, с этим ничего не поделаешь.
В области действия функции вы можете использовать объявление использования для устранения неоднозначности:
void f()
{
using std::tr1::shared_ptr;
shared_ptr<int> p;
}
Но это не сработает в глобальном пространстве имен, потому что вы уже загрязнили эту область неосторожными директивами using.