00001 // This is an input file for revealing an inconsistency in Doxygen's type matching 00002 // 00003 // Sometimes Doxygen fails to link argument types to their definitions at certain places in the generated HTML. 00004 // The presence of this bug is related to the usage of namespaces and maybe also to the usage of STL. 00005 // However, in all tested cases the argument types were correctly linked to their definition from the included source code. 00006 // 00007 // Below are several declarations of a "process" method with a comment about what is 00008 // the problem in the generated HTML documentation. 00009 // Uncomment one declaration at a time to get the corresponding result. 00010 00011 #include <string> 00012 #include <vector> 00013 #include <map> 00014 00015 namespace PP 00016 { 00017 typedef std::map<int, std::string> IntToStringDict; 00018 } 00019 00020 namespace KK 00021 { 00022 typedef std::vector<std::string> StringVector; 00023 } 00024 00025 // This fails to recognize the type IntToStringDict both in the function list and function documentation 00026 using PP::IntToStringDict; 00027 namespace MM 00028 { 00029 void process(const string& s, IntToStringDict& d, const KK::StringVector& v); 00030 } 00031 00032 // This fails to recognize the type IntToStringDict both in the function list and function documentation 00033 //namespace MM 00034 //{ 00035 // using PP::IntToStringDict; 00036 // void process(const string& s, IntToStringDict& d, const KK::StringVector& v); 00037 //} 00038 00039 // This fails to recognize the type IntToStringDict both in the function list and function documentation 00040 //using PP::IntToStringDict; 00041 //void process(const string& s, IntToStringDict& d, const KK::StringVector& v); 00042 00043 // This fails to recognize the IntToStringDict type in the function documentation section 00044 // but recognizes it in the list of namespace functions 00045 //namespace MM 00046 //{ 00047 // using namespace PP; 00048 // void process(const string& s, IntToStringDict& d, const KK::StringVector& v); 00049 //} 00050 00051 // This produces a correct output 00052 //using namespace PP; 00053 //void process(const string& s, IntToStringDict& d, const KK::StringVector& v); 00054 00055 // This produces a correct output 00056 //void process(const string& s, PP::IntToStringDict& d, const KK::StringVector& v);