doxygen icon indicating copy to clipboard operation
doxygen copied to clipboard

Nested structs documentation broken

Open eseiler opened this issue 1 year ago • 3 comments

Describe the bug

//!\brief A.
template <typename t_>
struct A
{
    struct B;
};

//!\brief B.
template <typename t>
struct A<t>::B
{
    using A_type = A<t>; //!< Foo.
    struct C;
};

//!\brief C.
template <typename t>
struct A<t>::B::C
{
    friend struct B;

    C() = default; //!< Defaulted.
};

With

-EXTRACT_ALL            = NO
+EXTRACT_ALL            = YES
-GENERATE_LATEX         = YES
+GENERATE_LATEX         = NO

There are three directories in the attached example:

  • html_working: Expected output, doxygen 1.12.0
  • html_with_error: Actual output, doxygen trunk
  • html_no_error: Output with typename t instead of typename t_, doxygen trunk

html_working has one page for each struct and all members are documented.

html_with_error has one page for each struct, but no members are documented.

html_no_error has all structs redirect to A and no members are documented. I found two ways to silence the error. However, the documentation is still broken:

  1. template <typename t_> -> template <typename t> for struct A
  2. Remove using A_type = A<t>; in struct B

The error for html_with_error is:

error: FileDefImpl::insertMembers(): member 'B' with class scope '<global>' inserted in file scope 'example.hpp'!

And there is also a warning:

warning: documented symbol 'A< t_ >::B::C::C' was not declared or defined.

The other two versions have no warnings or errors.

Screenshots I uploaded the three builds temporarily:

Overview html_working html_with_error html_no_error

To Reproduce example.tar.gz

Expected behavior Should look like with doxygen 1.12.0 It also shouldn't matter whether it's typename t_ or typename t for struct A.

Version The error message occurs since f4fc9a55898dd12167135fe0cbf228418e89d0f8 The broken documentation existed before that, I did not bisect it, but it works as expected with doxygen 1.12.0.

eseiler avatar Nov 04 '24 13:11 eseiler

@eseiler I assume you mean e.g. the missing friend and constructor/ destructor information on the page regarding A< t_ >::B::C Struct Reference (html/struct_a_1_1_b_1_1_c.html)

Maybe we have 2 problems but it is also possible that the first problem (missing information) is causing the second problem (warnings) therefore first the missing information should be solved as this looks like to be introduced by:

Commit: ef4065af3fb3b6a73b6d919a05f02a170880fefe [ef4065a]
Date: Sunday, September 22, 2024 9:45:57 PM
issue #11144 Template relation doesn't appear on graph

which is before the warnings appeared.

albert-github avatar Nov 04 '24 17:11 albert-github

@eseiler I assume you mean e.g. the missing friend and constructor/ destructor information on the page regarding A< t_ >::B::C Struct Reference (html/struct_a_1_1_b_1_1_c.html)

Yes

eseiler avatar Nov 04 '24 17:11 eseiler

This issue is still present on the current master (33a89a6668ac70ebc8971a69423c030698998967)

eseiler avatar Mar 06 '25 20:03 eseiler