I'm using Doxygen 1.8.6 (default repository version of the current 
Ubuntu LTS release) and encounter two issues while trying to move 
documentation to structural commands (mainly \fn for member functions).

The first problem occurs when a class method with different signatures 
is declared const:

/**
  * \file test.hpp
  */
/**
  * \fn template <T, U> void Foo::bar(T a, U b) const
  * \brief two args
  *
  * \fn template <T> void Foo::bar(T a) const
  * \brief one arg
  */
/**
  * \brief Foobar
  */
class Foo {
     public:
     template <typename T, typename U> void bar(T a, U b) const {}
     template <typename T> void bar(T a) const {}

};

which fails to document with two warnings, one of which is (abbreviated):

   no matching class member found for
     template< T > void Foo::bar(T a) const
   Possible candidates:
     'template < T >
     void Foo::bar(T a) const

Removing the four occurences of const in the source file "fixes" the 
warning, as does removing one of the signatures, neither of which I can 
do. Using \overload in any combination doesn't help, same with switching 
"T" for "typename T" and similar in pretty much any combination. Not 
sure what the apostrophe in the warning is about.

The other example is about mixing overloading and default parameters:

/**
  * \file test.hpp
  */
/**
  * \fn template <T, U> void Foo::bar(T a, U b, int c=1)
  * \brief three args
  *
  * \fn template <T> void Foo::bar(T a)
  * \brief one arg
  */
/**
  * \brief Foobar
  */
class Foo {
     public:
     template <typename T, typename U> void bar(T a, U b, int c=1) {}
     template <typename T> void bar(T a) {}
};

which fails to document with one warning (again abbreviated to the most 
confusing part):

   no matching class member found for
     template< T, U > void Foo::bar(T a, U b, int c=1)
   Possible candidates:
   'template < T, U >
     void Foo::bar(T a, U b, int c=1)

The one-argument member function gets documented, the three-argument one 
doesn't.
Removing the default parameter for the third argument "fixes" the 
problem again, and interestingly so does removing the one-argument 
member function (then in the resulting HTML, both \fn commands are 
attached to the three-argument version). Also no success fiddling with 
\overload and template keywords here.

So... any way to make this work properly, or should I go bother the 
package maintainers to start building with clang parsing support?

cheers
Donjan Rodic

------------------------------------------------------------------------------
_______________________________________________
Doxygen-users mailing list
Doxygen-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/doxygen-users

Reply via email to