One of things which is common when reading C++ code is their usage of typedef to simplify type name. I saw a lot of them.
Even STL's string uses typedef, as string is not a built-in type.
typedef basic_string<char, char_traits<char>, allocator<char> > string;
Yeah, it is long, but still easily readable.
Now if we have a factory method
Animal* createAnimal(const Continent&, const int, const std::string);
and then we have a function which returns that factory method by string, and we insist not to use typedef
Animal* (* getAnimalFactory(std::string))(const Continent&, const int, const std::string);
Oh my God...
Just saying, in other static typed language it can be much simpler, though we can say it is not apple to apple comparison.
partial Func<Continent, int, string> getAnimalFactory(string id);