Skip to content

Commit c9a007c

Browse files
authored
Bugfix: lowering of variadic templates of functions (#905)
* Missing trailing '...' in variadic template arguments. * Added regression test.
1 parent 5edf71b commit c9a007c

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

regression-tests/pure2-variadics.cpp2

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// Type pack expansion
33
x: <Ts...: type> type = {
44
tup: std::tuple<Ts...> = ();
5+
6+
func: () = {}
57
}
68

79
left_fold_print: <Args...: type> (inout out: std::ostream, args...: Args) = {

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,21 @@ template<typename ...Ts> class x;
2020
#line 3 "pure2-variadics.cpp2"
2121
template<typename ...Ts> class x {
2222
private: std::tuple<Ts...> tup {};
23+
24+
public: static auto func() -> void;
2325
public: x() = default;
2426
public: x(x const&) = delete; /* No 'that' constructor, suppress copy */
2527
public: auto operator=(x const&) -> void = delete;
2628

27-
#line 5 "pure2-variadics.cpp2"
29+
#line 7 "pure2-variadics.cpp2"
2830
};
2931

3032
template<typename ...Args> auto left_fold_print(std::ostream& out, Args const& ...args) -> void;
3133

32-
#line 12 "pure2-variadics.cpp2"
34+
#line 14 "pure2-variadics.cpp2"
3335
template<typename ...Args> [[nodiscard]] auto all(Args const& ...args) -> bool;
3436

35-
#line 16 "pure2-variadics.cpp2"
37+
#line 18 "pure2-variadics.cpp2"
3638
template <typename ...Args> [[nodiscard]] auto make_string(Args&& ...args) -> auto;
3739

3840
template <typename T, typename ...Args> [[nodiscard]] auto make(Args&& ...args) -> auto;
@@ -43,7 +45,10 @@ auto main() -> int;
4345

4446
#line 1 "pure2-variadics.cpp2"
4547

46-
#line 7 "pure2-variadics.cpp2"
48+
#line 6 "pure2-variadics.cpp2"
49+
template <typename ...Ts> auto x<Ts...>::func() -> void{}
50+
51+
#line 9 "pure2-variadics.cpp2"
4752
template<typename ...Args> auto left_fold_print(std::ostream& out, Args const& ...args) -> void{
4853
// Binary left fold expression
4954
(out << ... << args);
@@ -59,7 +64,7 @@ template <typename T, typename ...Args> [[nodiscard]] auto make(Args&& ...args)
5964

6065
auto main() -> int
6166
{
62-
x<int,long,std::string> auto_22_5 {};
67+
x<int,long,std::string> auto_24_5 {};
6368

6469
std::cout << std::string("xyzzy", 3) << "\n";
6570
std::cout << make_string("plugh", cpp2::u8{3}) << "\n";

source/to_cpp1.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4923,6 +4923,9 @@ class cppfront
49234923
for (auto& tparam : parent->template_parameters->parameters) {
49244924
assert (tparam->has_name());
49254925
list += separator + tparam->name()->to_string();
4926+
if(tparam->declaration->is_variadic) {
4927+
list += "...";
4928+
}
49264929
separator = ",";
49274930
}
49284931
list += ">";

0 commit comments

Comments
 (0)