12
12
template <typename ...Ts> class x ;
13
13
14
14
15
+ #line 10 "pure2-variadics.cpp2"
16
+ template <int ...Ts> class y ;
17
+
18
+
15
19
// === Cpp2 type definitions and function declarations ===========================
16
20
17
21
#line 1 "pure2-variadics.cpp2"
@@ -29,12 +33,23 @@ template<typename ...Ts> class x {
29
33
#line 7 "pure2-variadics.cpp2"
30
34
};
31
35
36
+ // int pack expansion
37
+ template <int ...Ts> class y {
38
+
39
+ public: [[nodiscard]] static auto func () -> auto;
40
+ public: y() = default ;
41
+ public: y(y const &) = delete ; /* No 'that' constructor, suppress copy */
42
+ public: auto operator =(y const &) -> void = delete ;
43
+
44
+ #line 13 "pure2-variadics.cpp2"
45
+ };
46
+
32
47
template <typename ...Args> auto left_fold_print (std::ostream& out, Args const & ...args) -> void;
33
48
34
- #line 14 "pure2-variadics.cpp2"
49
+ #line 20 "pure2-variadics.cpp2"
35
50
template <typename ...Args> [[nodiscard]] auto all (Args const & ...args) -> bool;
36
51
37
- #line 18 "pure2-variadics.cpp2"
52
+ #line 24 "pure2-variadics.cpp2"
38
53
template <typename ...Args> [[nodiscard]] auto make_string (Args&& ...args) -> auto;
39
54
40
55
template <typename T, typename ...Args> [[nodiscard]] auto make (Args&& ...args) -> auto;
@@ -48,7 +63,10 @@ auto main() -> int;
48
63
#line 6 "pure2-variadics.cpp2"
49
64
template <typename ...Ts> auto x<Ts...>::func() -> void {}
50
65
51
- #line 9 "pure2-variadics.cpp2"
66
+ #line 12 "pure2-variadics.cpp2"
67
+ template <int ...Ts> [[nodiscard]] auto y<Ts...>::func() -> auto { return (0 + ... + Ts); }
68
+
69
+ #line 15 "pure2-variadics.cpp2"
52
70
template <typename ...Args> auto left_fold_print (std::ostream& out, Args const & ...args) -> void{
53
71
// Binary left fold expression
54
72
(out << ... << args);
@@ -64,7 +82,7 @@ template <typename T, typename ...Args> [[nodiscard]] auto make(Args&& ...args)
64
82
65
83
auto main () -> int
66
84
{
67
- x<int ,long ,std::string> auto_24_5 {};
85
+ x<int ,long ,std::string> auto_30_5 {};
68
86
69
87
std::cout << std::string (" xyzzy" , 3 ) << " \n " ;
70
88
std::cout << make_string (" plugh" , cpp2::u8 {3 }) << " \n " ;
@@ -74,5 +92,7 @@ auto main() -> int
74
92
75
93
std::cout << " \n first all() returned " + cpp2::to_string (all (true , true , true , false ));
76
94
std::cout << " \n second all() returned " << cpp2::as_<std::string>(all (true , true , true , true ));
95
+
96
+ std::cout << " \n sum of (1, 2, 3, 100) is: " << cpp2::as_<std::string>(CPP2_UFCS (func)(y<1 ,2 ,3 ,100 >()));
77
97
}
78
98
0 commit comments