Skip to content

Commit 336ad31

Browse files
committed
feat: destructor overloads in class templates
1 parent 2bff4e2 commit 336ad31

File tree

7 files changed

+279
-9
lines changed

7 files changed

+279
-9
lines changed

src/lib/Metadata/Finalizers/Javadoc/Overloads.hpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,18 @@ populateOverloadsFromClass(OverloadsInfo& I)
7070
I.javadoc->brief = "Constructors";
7171
return true;
7272
}
73+
case FunctionClass::Destructor:
74+
{
75+
I.javadoc->brief = "Destructors";
76+
return true;
77+
}
7378
case FunctionClass::Conversion:
7479
{
7580
I.javadoc->brief = "Conversion operators";
7681
return true;
7782
}
78-
case FunctionClass::Destructor:
7983
default:
80-
MRDOCS_UNREACHABLE();
84+
MRDOCS_UNREACHABLE();
8185
}
8286
}
8387

@@ -123,10 +127,10 @@ populateOverloadsFromFunctionName(OverloadsInfo& I)
123127
return false;
124128
}
125129
I.javadoc->brief.emplace();
126-
I.javadoc->brief->children.emplace_back(Polymorphic<doc::Text>(
127-
std::in_place_type<doc::Styled>, std::string(name), doc::Style::mono));
128-
I.javadoc->brief->children.emplace_back(Polymorphic<doc::Text>(
129-
std::in_place_type<doc::Text>, std::string(" overloads")));
130+
I.javadoc->brief->children.emplace_back(
131+
std::in_place_type<doc::Styled>, std::string(name), doc::Style::mono);
132+
I.javadoc->brief->children.emplace_back(
133+
std::in_place_type<doc::Text>, std::string(" overloads"));
130134
return true;
131135
}
132136

src/lib/Metadata/Finalizers/OverloadsFinalizer.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ foldOverloads(SymbolID const& contextId, std::vector<SymbolID>& functionIds, boo
129129
MRDOCS_CHECK_OR_CONTINUE(infoPtr);
130130
auto* function = infoPtr->asFunctionPtr();
131131
MRDOCS_CHECK_OR_CONTINUE(function);
132-
MRDOCS_CHECK_OR_CONTINUE(function->Class != FunctionClass::Destructor);
133132

134133
// Check if the FunctionInfo is unique
135134
std::ranges::subrange otherFunctionIds(

src/lib/Metadata/Info/Overloads.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ merge(OverloadsInfo& I, OverloadsInfo&& Other)
4343
void
4444
addMember(OverloadsInfo& I, FunctionInfo const& Member)
4545
{
46-
MRDOCS_ASSERT(Member.Class != FunctionClass::Destructor);
47-
4846
if (I.Members.empty())
4947
{
5048
I.Name = Member.Name;
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
= Reference
2+
:mrdocs:
3+
4+
[#index]
5+
== Global namespace
6+
7+
=== Types
8+
9+
[cols=1]
10+
|===
11+
| Name
12+
| link:#A[`A`]
13+
|===
14+
15+
[#A]
16+
== A
17+
18+
=== Synopsis
19+
20+
Declared in `&lt;dtor&hyphen;overloads&period;cpp&gt;`
21+
22+
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
23+
----
24+
template&lt;class T&gt;
25+
struct A;
26+
----
27+
28+
=== Member Functions
29+
30+
[cols=2]
31+
|===
32+
| Name
33+
| Description
34+
| link:#A-2destructor-02[`&#126;A`] [.small]#[destructor]#
35+
| Destructors
36+
|===
37+
38+
[#A-2destructor-02]
39+
== link:#A[A]::&#126;A
40+
41+
Destructors
42+
43+
=== Synopses
44+
45+
Declared in `&lt;dtor&hyphen;overloads&period;cpp&gt;`
46+
47+
Destructor
48+
49+
50+
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
51+
----
52+
link:#A-2destructor-0c[&#126;A]()
53+
requires (sizeof(T) &gt; 4);
54+
----
55+
56+
[.small]#link:#A-2destructor-0c[_» more&period;&period;&period;_]#
57+
58+
Destructor
59+
60+
61+
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
62+
----
63+
link:#A-2destructor-07[&#126;A]()
64+
requires (sizeof(T) &lt;&equals; 4);
65+
----
66+
67+
[.small]#link:#A-2destructor-07[_» more&period;&period;&period;_]#
68+
69+
[#A-2destructor-0c]
70+
== link:#A[A]::&#126;A
71+
72+
Destructor
73+
74+
=== Synopsis
75+
76+
Declared in `&lt;dtor&hyphen;overloads&period;cpp&gt;`
77+
78+
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
79+
----
80+
&#126;A()
81+
requires (sizeof(T) &gt; 4);
82+
----
83+
84+
[#A-2destructor-07]
85+
== link:#A[A]::&#126;A
86+
87+
Destructor
88+
89+
=== Synopsis
90+
91+
Declared in `&lt;dtor&hyphen;overloads&period;cpp&gt;`
92+
93+
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
94+
----
95+
&#126;A()
96+
requires (sizeof(T) &lt;&equals; 4);
97+
----
98+
99+
100+
[.small]#Created with https://www.mrdocs.com[MrDocs]#
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
template <class T>
2+
struct A
3+
{
4+
~A() requires (sizeof(T) > 4);
5+
~A() requires (sizeof(T) <= 4);
6+
};
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
<html lang="en">
2+
<head>
3+
<title>Reference</title>
4+
</head>
5+
<body>
6+
<div>
7+
<h1>Reference</h1>
8+
<div>
9+
<div>
10+
<h2 id="index"><a href="#index"></a></h2>
11+
</div>
12+
<h2>Types</h2>
13+
<table style="table-layout: fixed; width: 100%;">
14+
<thead>
15+
<tr>
16+
<th>Name</th>
17+
</tr>
18+
</thead>
19+
<tbody>
20+
<tr>
21+
<td><a href="#A"><code>A</code></a> </td></tr>
22+
</tbody>
23+
</table>
24+
25+
</div>
26+
<div>
27+
<div>
28+
<h2 id="A"><a href="#A">A</a></h2>
29+
</div>
30+
<div>
31+
<h3>Synopsis</h3>
32+
<div>
33+
Declared in <code>&lt;dtor-overloads.cpp&gt;</code></div>
34+
<pre>
35+
<code class="source-code cpp">template&lt;class T&gt;
36+
struct A;
37+
38+
</code>
39+
</pre>
40+
</div>
41+
<h2>Member Functions</h2>
42+
<table style="table-layout: fixed; width: 100%;">
43+
<thead>
44+
<tr>
45+
<th>Name</th>
46+
<th>Description</th>
47+
</tr>
48+
</thead>
49+
<tbody>
50+
<tr>
51+
<td><a href="#A-2destructor-02"><code>~A</code></a> <span class="small">[destructor]</span></td><td><span>Destructors</span></td></tr>
52+
</tbody>
53+
</table>
54+
55+
56+
57+
</div>
58+
<div>
59+
<div>
60+
<h2 id="A-2destructor-02"><a href="#A-2destructor-02">A::~A</a></h2>
61+
<div>
62+
<span>Destructors</span>
63+
64+
</div>
65+
</div>
66+
<div>
67+
<h3>Synopses</h3>
68+
<div>
69+
Declared in <code>&lt;dtor-overloads.cpp&gt;</code></div>
70+
<span>Destructor</span>
71+
<pre>
72+
<code class="source-code cpp"><a href="#A-2destructor-0c">~A</a>()
73+
requires (sizeof(T) &gt; 4);
74+
75+
</code>
76+
</pre><span class="small"><a href="#A-2destructor-0c"><em>» more...</em></a></span>
77+
78+
<span>Destructor</span>
79+
<pre>
80+
<code class="source-code cpp"><a href="#A-2destructor-07">~A</a>()
81+
requires (sizeof(T) &lt;&#x3D; 4);
82+
83+
</code>
84+
</pre><span class="small"><a href="#A-2destructor-07"><em>» more...</em></a></span>
85+
86+
87+
</div>
88+
</div>
89+
<div>
90+
<div>
91+
<h2 id="A-2destructor-0c"><a href="#A-2destructor-0c">A::~A</a></h2>
92+
<div>
93+
<span>Destructor</span>
94+
95+
</div>
96+
</div>
97+
<div>
98+
<h3>Synopsis</h3>
99+
<div>
100+
Declared in <code>&lt;dtor-overloads.cpp&gt;</code></div>
101+
<pre>
102+
<code class="source-code cpp">~A()
103+
requires (sizeof(T) &gt; 4);
104+
105+
</code>
106+
</pre>
107+
</div>
108+
</div>
109+
<div>
110+
<div>
111+
<h2 id="A-2destructor-07"><a href="#A-2destructor-07">A::~A</a></h2>
112+
<div>
113+
<span>Destructor</span>
114+
115+
</div>
116+
</div>
117+
<div>
118+
<h3>Synopsis</h3>
119+
<div>
120+
Declared in <code>&lt;dtor-overloads.cpp&gt;</code></div>
121+
<pre>
122+
<code class="source-code cpp">~A()
123+
requires (sizeof(T) &lt;&#x3D; 4);
124+
125+
</code>
126+
</pre>
127+
</div>
128+
</div>
129+
130+
</div>
131+
<div>
132+
<h4>Created with <a href="https://www.mrdocs.com">MrDocs</a></h4>
133+
</div>
134+
</body>
135+
</html>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<mrdocs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="https://github.com/cppalliance/mrdocs/raw/develop/mrdocs.rnc">
4+
<namespace id="//////////////////////////8=">
5+
<template>
6+
<tparam name="T" class="type"/>
7+
<struct name="A" id="5tUSuMtQqtYE49jBjSYSWp0DJAM=">
8+
<file short-path="dtor-overloads.cpp" source-path="dtor-overloads.cpp" line="1" class="def"/>
9+
<function class="destructor" name="~A" requires="(sizeof(T) &gt; 4)" id="xZWD5Nj90rTCyJDEhzD6gUhq3qE=">
10+
<file short-path="dtor-overloads.cpp" source-path="dtor-overloads.cpp" line="4"/>
11+
<doc>
12+
<brief>
13+
<text>Destructor</text>
14+
</brief>
15+
</doc>
16+
</function>
17+
<function class="destructor" name="~A" requires="(sizeof(T) &lt;= 4)" id="en1Y0aCxO+KbTjl16ffxjNYAjT8=">
18+
<file short-path="dtor-overloads.cpp" source-path="dtor-overloads.cpp" line="5"/>
19+
<doc>
20+
<brief>
21+
<text>Destructor</text>
22+
</brief>
23+
</doc>
24+
</function>
25+
</struct>
26+
</template>
27+
</namespace>
28+
</mrdocs>

0 commit comments

Comments
 (0)