#include #include typedef std::list anylist; void flatten(std::list& list) { typedef anylist::iterator iterator; iterator current = list.begin(); while (current != list.end()) { if (current->type() == typeid(anylist)) { iterator next = current; ++next; list.splice(next, boost::any_cast(*current)); current = list.erase(current); } else ++current; } }