Skip to content

Commit 9612577

Browse files
committed
Missing name generation of unamed template types in tempalte parameter list.
1 parent 0955521 commit 9612577

File tree

4 files changed

+20
-21
lines changed

4 files changed

+20
-21
lines changed
Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +0,0 @@
1-
pure2-variadics.cpp2:17:20: error: declaration of template parameter ‘UnnamedTypeParam1’ shadows template parameter
2-
pure2-variadics.cpp2:16:10: note: template parameter ‘UnnamedTypeParam1’ declared here
3-
pure2-variadics.cpp2:27:20: error: declaration of template parameter ‘UnnamedTypeParam1’ shadows template parameter
4-
pure2-variadics.cpp2:26:10: note: template parameter ‘UnnamedTypeParam1’ declared here
5-
pure2-variadics.cpp2:17:53: error: declaration of template parameter ‘UnnamedTypeParam1’ shadows template parameter
6-
pure2-variadics.cpp2:17:13: note: template parameter ‘UnnamedTypeParam1’ declared here
7-
pure2-variadics.cpp2:17:98: error: ‘_’ was not declared in this scope
8-
pure2-variadics.cpp2:17:99: error: expected parameter pack before ‘...’
9-
pure2-variadics.cpp2:17:102: error: template argument 1 is invalid
10-
pure2-variadics.cpp2:17:95: error: too many template-parameter-lists
11-
pure2-variadics.cpp2:27:49: error: declaration of template parameter ‘UnnamedTypeParam1’ shadows template parameter
12-
pure2-variadics.cpp2:27:13: note: template parameter ‘UnnamedTypeParam1’ declared here
13-
pure2-variadics.cpp2:27:94: error: ‘_’ was not declared in this scope
14-
pure2-variadics.cpp2:27:95: error: expected parameter pack before ‘...’
15-
pure2-variadics.cpp2:27:98: error: template argument 1 is invalid
16-
pure2-variadics.cpp2:27:91: error: too many template-parameter-lists

regression-tests/test-results/pure2-variadics.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,13 @@ auto main() -> int;
9393
template <int ...Ts> [[nodiscard]] auto y<Ts...>::func() -> auto { return (0 + ... + Ts); }
9494

9595
#line 17 "pure2-variadics.cpp2"
96-
template <typename ...UnnamedTypeParam1_16_14> template<int UnnamedTypeParam1_17_7> [[nodiscard]] auto t0<_...>::f() -> cpp2::i32 { return 0; }
96+
template <typename ...UnnamedTypeParam1_16_14> template<int UnnamedTypeParam1_17_7> [[nodiscard]] auto t0<UnnamedTypeParam1_16_14...>::f() -> cpp2::i32 { return 0; }
9797

9898
#line 22 "pure2-variadics.cpp2"
9999
template <auto ...T> template<int UnnamedTypeParam1_22_7> [[nodiscard]] auto t1<T...>::f() -> cpp2::i32 { return 0; }
100100

101101
#line 27 "pure2-variadics.cpp2"
102-
template <auto ...UnnamedTypeParam1_26_14> template<int UnnamedTypeParam1_27_7> [[nodiscard]] auto t2<_...>::f() -> cpp2::i32 { return 0; }
102+
template <auto ...UnnamedTypeParam1_26_14> template<int UnnamedTypeParam1_27_7> [[nodiscard]] auto t2<UnnamedTypeParam1_26_14...>::f() -> cpp2::i32 { return 0; }
103103

104104
#line 30 "pure2-variadics.cpp2"
105105
template<typename ...Args> auto left_fold_print(std::ostream& out, Args const& ...args) -> void{

source/lex.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,15 @@ auto labelized_position(token const* t)
333333
return ret;
334334
}
335335

336+
auto unnamed_type_param_name(int ordinal, token const* t)
337+
-> std::string
338+
{
339+
return "UnnamedTypeParam"
340+
+ std::to_string(ordinal)
341+
+ "_"
342+
+ labelized_position(t);
343+
}
344+
336345

337346
//-----------------------------------------------------------------------
338347
//

source/to_cpp1.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4272,8 +4272,7 @@ class cppfront
42724272
}
42734273

42744274
if (identifier == "_") {
4275-
printer.print_cpp2( "UnnamedTypeParam" + std::to_string(n.ordinal) + "_"
4276-
+ labelized_position(n.declaration->identifier->get_token()),
4275+
printer.print_cpp2( unnamed_type_param_name(n.ordinal, n.declaration->identifier->get_token()),
42774276
identifier_pos );
42784277
}
42794278
else {
@@ -4929,7 +4928,14 @@ class cppfront
49294928
auto separator = std::string{"<"};
49304929
for (auto& tparam : parent->template_parameters->parameters) {
49314930
assert (tparam->has_name());
4932-
list += separator + tparam->name()->to_string();
4931+
list += separator;
4932+
if ("_" == tparam->name()->to_string()) {
4933+
list += unnamed_type_param_name(tparam->ordinal,
4934+
tparam->declaration->identifier->get_token());
4935+
}
4936+
else {
4937+
list += tparam->name()->to_string();
4938+
}
49334939
if(tparam->declaration->is_variadic) {
49344940
list += "...";
49354941
}

0 commit comments

Comments
 (0)