Skip to content

Commit c85be75

Browse files
committed
fix: remove duplicate ellipsis in parameter pack expansion
Only set IsPackExpansion on the outermost Result type in TypeBuilder's terminal builder functions.
1 parent 3462996 commit c85be75

5 files changed

Lines changed: 342 additions & 5 deletions

File tree

src/lib/AST/TypeBuilder.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ buildDecltype(
113113
MRDOCS_ASSERT(Inner);
114114
*Inner = Polymorphic<Type>(std::in_place_type<DecltypeType>);
115115
(*Inner)->Constraints = this->Constraints;
116-
(*Inner)->IsPackExpansion = pack;
117116

118117
auto &I = (*Inner)->asDecltype();
119118
getASTVisitor().populate(I.Operand, T->getUnderlyingExpr());
@@ -134,7 +133,6 @@ buildAuto(
134133
MRDOCS_ASSERT(Inner);
135134
*Inner = Polymorphic<Type>(std::in_place_type<AutoType>);
136135
(*Inner)->Constraints = this->Constraints;
137-
(*Inner)->IsPackExpansion = pack;
138136

139137
auto &I = (*Inner)->asAuto();
140138
I.IsConst = quals & clang::Qualifiers::Const;
@@ -167,7 +165,6 @@ buildTerminal(
167165
MRDOCS_SYMBOL_TRACE(T, getASTVisitor().context_);
168166
MRDOCS_ASSERT(Inner);
169167
*Inner = Polymorphic<Type>(std::in_place_type<NamedType>);
170-
(*Inner)->IsPackExpansion = pack;
171168
(*Inner)->Constraints = this->Constraints;
172169

173170
auto &TI = (*Inner)->asNamed();
@@ -195,7 +192,6 @@ buildTerminal(
195192
{
196193
MRDOCS_ASSERT(Inner);
197194
*Inner = Polymorphic<Type>(std::in_place_type<NamedType>);
198-
(*Inner)->IsPackExpansion = pack;
199195
(*Inner)->Constraints = this->Constraints;
200196

201197
auto &I = (*Inner)->asNamed();
@@ -247,7 +243,6 @@ buildTerminal(
247243

248244
MRDOCS_ASSERT(Inner);
249245
*Inner = Polymorphic<Type>(std::in_place_type<NamedType>);
250-
(*Inner)->IsPackExpansion = pack;
251246
(*Inner)->Constraints = this->Constraints;
252247

253248
auto &TI = (*Inner)->asNamed();
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
= Reference
2+
:mrdocs:
3+
4+
[#index]
5+
== Global namespace
6+
7+
=== Functions
8+
9+
[cols=1]
10+
|===
11+
| Name
12+
| link:#by_const_ref[`by&lowbar;const&lowbar;ref`]
13+
| link:#by_pointer[`by&lowbar;pointer`]
14+
| link:#by_ref[`by&lowbar;ref`]
15+
| link:#by_value[`by&lowbar;value`]
16+
| link:#forward_all[`forward&lowbar;all`]
17+
| link:#make_ptr[`make&lowbar;ptr`]
18+
|===
19+
20+
[#by_const_ref]
21+
== by&lowbar;const&lowbar;ref
22+
23+
=== Synopsis
24+
25+
Declared in `&lt;pack&hyphen;expansion&period;cpp&gt;`
26+
27+
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
28+
----
29+
template&lt;typename&period;&period;&period; Ts&gt;
30+
void
31+
by&lowbar;const&lowbar;ref(Ts const&&period;&period;&period; args);
32+
----
33+
34+
[#by_pointer]
35+
== by&lowbar;pointer
36+
37+
=== Synopsis
38+
39+
Declared in `&lt;pack&hyphen;expansion&period;cpp&gt;`
40+
41+
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
42+
----
43+
template&lt;typename&period;&period;&period; Ts&gt;
44+
void
45+
by&lowbar;pointer(Ts*&period;&period;&period; args);
46+
----
47+
48+
[#by_ref]
49+
== by&lowbar;ref
50+
51+
=== Synopsis
52+
53+
Declared in `&lt;pack&hyphen;expansion&period;cpp&gt;`
54+
55+
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
56+
----
57+
template&lt;typename&period;&period;&period; Ts&gt;
58+
void
59+
by&lowbar;ref(Ts&&period;&period;&period; args);
60+
----
61+
62+
[#by_value]
63+
== by&lowbar;value
64+
65+
=== Synopsis
66+
67+
Declared in `&lt;pack&hyphen;expansion&period;cpp&gt;`
68+
69+
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
70+
----
71+
template&lt;typename&period;&period;&period; Ts&gt;
72+
void
73+
by&lowbar;value(Ts&period;&period;&period; args);
74+
----
75+
76+
[#forward_all]
77+
== forward&lowbar;all
78+
79+
=== Synopsis
80+
81+
Declared in `&lt;pack&hyphen;expansion&period;cpp&gt;`
82+
83+
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
84+
----
85+
template&lt;class&period;&period;&period; Args&gt;
86+
void
87+
forward&lowbar;all(Args&&&period;&period;&period; args);
88+
----
89+
90+
[#make_ptr]
91+
== make&lowbar;ptr
92+
93+
=== Synopsis
94+
95+
Declared in `&lt;pack&hyphen;expansion&period;cpp&gt;`
96+
97+
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
98+
----
99+
template&lt;
100+
class T,
101+
class&period;&period;&period; Args&gt;
102+
T*
103+
make&lowbar;ptr(Args&&&period;&period;&period; args);
104+
----
105+
106+
107+
[.small]#Created with https://www.mrdocs.com[MrDocs]#
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Test parameter pack expansion in function parameters
2+
// Issue #1129: Args&&... args rendered as Args...&&... args
3+
4+
template<class T, class... Args>
5+
T* make_ptr(Args&&... args);
6+
7+
template<class... Args>
8+
void forward_all(Args&&... args);
9+
10+
template<typename... Ts>
11+
void by_value(Ts... args);
12+
13+
template<typename... Ts>
14+
void by_ref(Ts&... args);
15+
16+
template<typename... Ts>
17+
void by_const_ref(const Ts&... args);
18+
19+
template<typename... Ts>
20+
void by_pointer(Ts*... args);
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
<html lang="en">
2+
<head>
3+
<title>Reference</title>
4+
<meta charset="utf-8">
5+
</head>
6+
<body>
7+
<div>
8+
<h1>Reference</h1>
9+
<div>
10+
<div>
11+
<h2 id="index">
12+
Global Namespace<a class="mrdocs-anchor" href="#index" aria-label="Permalink">#</a>
13+
</h2>
14+
</div>
15+
<h2>
16+
Functions</h2>
17+
<table style="table-layout: fixed; width: 100%;">
18+
<thead>
19+
<tr>
20+
<th>Name</th>
21+
</tr>
22+
</thead>
23+
<tbody>
24+
<tr>
25+
<td><a href="#by_const_ref"><code>by_const_ref</code></a> </td></tr><tr>
26+
<td><a href="#by_pointer"><code>by_pointer</code></a> </td></tr><tr>
27+
<td><a href="#by_ref"><code>by_ref</code></a> </td></tr><tr>
28+
<td><a href="#by_value"><code>by_value</code></a> </td></tr><tr>
29+
<td><a href="#forward_all"><code>forward_all</code></a> </td></tr><tr>
30+
<td><a href="#make_ptr"><code>make_ptr</code></a> </td></tr>
31+
</tbody>
32+
</table>
33+
34+
</div>
35+
<div>
36+
<div>
37+
<h2 id="by_const_ref">
38+
by_const_ref<a class="mrdocs-anchor" href="#by_const_ref" aria-label="Permalink">#</a>
39+
</h2>
40+
</div>
41+
<div>
42+
<h3>
43+
Synopsis</h3>
44+
<div>
45+
Declared in <code>&lt;pack-expansion.cpp&gt;</code></div>
46+
<pre><code class="source-code cpp">template&lt;typename... Ts&gt;
47+
void
48+
by_const_ref(Ts const&... args);</code></pre>
49+
</div>
50+
</div>
51+
<div>
52+
<div>
53+
<h2 id="by_pointer">
54+
by_pointer<a class="mrdocs-anchor" href="#by_pointer" aria-label="Permalink">#</a>
55+
</h2>
56+
</div>
57+
<div>
58+
<h3>
59+
Synopsis</h3>
60+
<div>
61+
Declared in <code>&lt;pack-expansion.cpp&gt;</code></div>
62+
<pre><code class="source-code cpp">template&lt;typename... Ts&gt;
63+
void
64+
by_pointer(Ts*... args);</code></pre>
65+
</div>
66+
</div>
67+
<div>
68+
<div>
69+
<h2 id="by_ref">
70+
by_ref<a class="mrdocs-anchor" href="#by_ref" aria-label="Permalink">#</a>
71+
</h2>
72+
</div>
73+
<div>
74+
<h3>
75+
Synopsis</h3>
76+
<div>
77+
Declared in <code>&lt;pack-expansion.cpp&gt;</code></div>
78+
<pre><code class="source-code cpp">template&lt;typename... Ts&gt;
79+
void
80+
by_ref(Ts&... args);</code></pre>
81+
</div>
82+
</div>
83+
<div>
84+
<div>
85+
<h2 id="by_value">
86+
by_value<a class="mrdocs-anchor" href="#by_value" aria-label="Permalink">#</a>
87+
</h2>
88+
</div>
89+
<div>
90+
<h3>
91+
Synopsis</h3>
92+
<div>
93+
Declared in <code>&lt;pack-expansion.cpp&gt;</code></div>
94+
<pre><code class="source-code cpp">template&lt;typename... Ts&gt;
95+
void
96+
by_value(Ts... args);</code></pre>
97+
</div>
98+
</div>
99+
<div>
100+
<div>
101+
<h2 id="forward_all">
102+
forward_all<a class="mrdocs-anchor" href="#forward_all" aria-label="Permalink">#</a>
103+
</h2>
104+
</div>
105+
<div>
106+
<h3>
107+
Synopsis</h3>
108+
<div>
109+
Declared in <code>&lt;pack-expansion.cpp&gt;</code></div>
110+
<pre><code class="source-code cpp">template&lt;class... Args&gt;
111+
void
112+
forward_all(Args&&... args);</code></pre>
113+
</div>
114+
</div>
115+
<div>
116+
<div>
117+
<h2 id="make_ptr">
118+
make_ptr<a class="mrdocs-anchor" href="#make_ptr" aria-label="Permalink">#</a>
119+
</h2>
120+
</div>
121+
<div>
122+
<h3>
123+
Synopsis</h3>
124+
<div>
125+
Declared in <code>&lt;pack-expansion.cpp&gt;</code></div>
126+
<pre><code class="source-code cpp">template&lt;
127+
class T,
128+
class... Args&gt;
129+
T*
130+
make_ptr(Args&&... args);</code></pre>
131+
</div>
132+
</div>
133+
134+
</div>
135+
<footer class="mrdocs-footer">
136+
<span>Created with <a href="https://www.mrdocs.com">MrDocs</a></span>
137+
</footer>
138+
</body>
139+
</html>
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
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="Ts" class="type"/>
7+
<function name="by_const_ref" id="48I+DPPjc7oVgnOqvRHnCnFIMRA=">
8+
<file short-path="pack-expansion.cpp" source-path="pack-expansion.cpp" line="16"/>
9+
<param name="args">
10+
<type class="lvalue-reference" is-pack="1">
11+
<pointee-type name="Ts" cv-qualifiers="const"/>
12+
</type>
13+
</param>
14+
</function>
15+
</template>
16+
<template>
17+
<tparam name="Ts" class="type"/>
18+
<function name="by_pointer" id="1uVKKR0qH3jqJg3vUUY+gN0nO6o=">
19+
<file short-path="pack-expansion.cpp" source-path="pack-expansion.cpp" line="19"/>
20+
<param name="args">
21+
<type class="pointer" is-pack="1">
22+
<pointee-type name="Ts"/>
23+
</type>
24+
</param>
25+
</function>
26+
</template>
27+
<template>
28+
<tparam name="Ts" class="type"/>
29+
<function name="by_ref" id="/W/y4BHD5QC3h6HiQc2zHFs9XZM=">
30+
<file short-path="pack-expansion.cpp" source-path="pack-expansion.cpp" line="13"/>
31+
<param name="args">
32+
<type class="lvalue-reference" is-pack="1">
33+
<pointee-type name="Ts"/>
34+
</type>
35+
</param>
36+
</function>
37+
</template>
38+
<template>
39+
<tparam name="Ts" class="type"/>
40+
<function name="by_value" id="2dPhCCrvmoBHZ2V3zGebTIf1GJw=">
41+
<file short-path="pack-expansion.cpp" source-path="pack-expansion.cpp" line="10"/>
42+
<param name="args">
43+
<type is-pack="1" name="Ts"/>
44+
</param>
45+
</function>
46+
</template>
47+
<template>
48+
<tparam name="Args" class="type"/>
49+
<function name="forward_all" id="s1dIpJCzH1qM6C834Cm+Cj1mh9M=">
50+
<file short-path="pack-expansion.cpp" source-path="pack-expansion.cpp" line="7"/>
51+
<param name="args">
52+
<type class="rvalue-reference" is-pack="1">
53+
<pointee-type name="Args"/>
54+
</type>
55+
</param>
56+
</function>
57+
</template>
58+
<template>
59+
<tparam name="T" class="type"/>
60+
<tparam name="Args" class="type"/>
61+
<function name="make_ptr" id="8RneSjP7y4RoThh/UAa4tw8/cC0=">
62+
<file short-path="pack-expansion.cpp" source-path="pack-expansion.cpp" line="4"/>
63+
<return>
64+
<type class="pointer">
65+
<pointee-type name="T"/>
66+
</type>
67+
</return>
68+
<param name="args">
69+
<type class="rvalue-reference" is-pack="1">
70+
<pointee-type name="Args"/>
71+
</type>
72+
</param>
73+
</function>
74+
</template>
75+
</namespace>
76+
</mrdocs>

0 commit comments

Comments
 (0)