We can choose a documentation tool from some great tools. If you use it at open source works, Doxygen may be the best application for you. It’s a famous application enough. The great feature of Doxygen is that it’s possible to support plural program languages. Doxygen is useful for most open source projects because it generates the document from C, C++, Java, Objective-C, Python, IDL, PHP, C# and D. You can start reading source code soon with the generated document after you download new open source project.
Doxygen is also used to clear your thinking about the design of your program. It’s difficult to rethink the dirty code on IDE screen. Doxygen and a coffee make it easy.
I think the reason that Doxygen is good for us is there are no good UML modeling tools in C++. When I tried to generate UML dialog from our source code by some tool, it couldn’t parse deep class with accuracy. Expensive tools also missed some classes sometimes. And, the complex templates are never generated to useful dialogs. In the case of C++ (or PHP), the documents generated by Doxygen are more useful for us than the dialog generated by UML tools.
Doxygen is good but this matter may be a deep problem to us who have to program in C++.