Hello. I'm working with boost::any and shared_ptr. I'm implementing a plugin system which uses registration from .so files (under Linux). The problem is that I have a factory function which returns boost::any. This boost::any object holds a pointer type. The problem is that when I try to get the registered type back to its real type through boost::any_cast, the cast always fails. If I register this type in the same executable as the application, everything is ok, and I can cast back to its real type.I have no idea why this happens: template <class T> struct ObjectFactory { boost::any operator()() const { typedef typename T::interface_type it; it * t = new T(); return t; } }; #define REGISTER_EXTENSION_NODE(extensionpoint, ns) \ namespace { \ static const bool registeredextensionnode = \ ::Gtk::Util::PluginsManager::instance().register_extension_node(#ns "::" #extensionpoint, \ ::Gtk::Util::detail::ExtensionNodeFactoryns::extensionpoint()); \ } These are the implied parts of my application. If I use the macro from a .so, it fails. If I use it from the .exe, everything's ok. The registration part seems to work, I checked the size of the containers and so on, and the elements were inserted. Any help how could I solve this? I've been trying to debug the problem for almost 4 hours with no luck.