8
8
9
9
#line 1 "pure2-default-arguments.cpp2"
10
10
11
+ #line 30 "pure2-default-arguments.cpp2"
12
+ template <typename T = int , int N = 42 > class myclass ;
13
+
11
14
12
15
// === Cpp2 type definitions and function declarations ===========================
13
16
@@ -24,6 +27,29 @@ auto my_function_name(
24
27
#line 12 "pure2-default-arguments.cpp2"
25
28
auto f (cpp2::impl::in<cpp2::i32> x = 0 ) -> void;
26
29
30
+ template
31
+ <
32
+ typename AssocContainer,
33
+ typename Func = std::plus<>
34
+ > auto combine_maps
35
+ (
36
+ AssocContainer& map1,
37
+ AssocContainer const & map2,
38
+ Func const & func = {}
39
+ ) -> void ;
40
+
41
+ #line 30 "pure2-default-arguments.cpp2"
42
+ template <typename T, int N> class myclass {
43
+ public: template <typename TT = int , int NN = 42 > static auto memfunc (cpp2::impl::in<int > MM = 43 ) -> void;
44
+ public: myclass() = default ;
45
+ public: myclass(myclass const &) = delete ; /* No 'that' constructor, suppress copy */
46
+ public: auto operator =(myclass const &) -> void = delete ;
47
+
48
+ #line 32 "pure2-default-arguments.cpp2"
49
+ };
50
+ template <typename T = int , int N = 42 > auto myfunc (cpp2::impl::in<int > M = 43 ) -> void;
51
+
52
+ #line 38 "pure2-default-arguments.cpp2"
27
53
auto main (int const argc_, char ** argv_) -> int;
28
54
29
55
// === Cpp2 function definitions =================================================
@@ -42,22 +68,57 @@ auto my_function_name(
42
68
auto f (cpp2::impl::in<cpp2::i32> x) -> void{std::cout << x; }
43
69
44
70
#line 14 "pure2-default-arguments.cpp2"
71
+ template
72
+ <
73
+ typename AssocContainer,
74
+ typename Func
75
+ > auto combine_maps
76
+ (
77
+ AssocContainer& map1,
78
+ AssocContainer const & map2,
79
+ Func const & func
80
+ ) -> void
81
+ {
82
+ for ( auto const & kv : map2 ) {
83
+ CPP2_ASSERT_IN_BOUNDS (map1, kv.first ) = func (CPP2_ASSERT_IN_BOUNDS (map1, kv.first ), kv.second );
84
+ }
85
+ }
86
+
87
+ #line 31 "pure2-default-arguments.cpp2"
88
+ template <typename T, int N> template <typename TT, int NN> auto myclass<T,N>::memfunc(cpp2::impl::in<int > MM) -> void {static_cast <void >(MM); }
89
+
90
+ #line 33 "pure2-default-arguments.cpp2"
91
+ template <typename T, int N> auto myfunc (cpp2::impl::in<int > M) -> void{
92
+ static_cast <void >(M);
93
+ []<typename TT = int , int NN = 42 >(cpp2::impl::in<int > MM = 43 ) -> void {static_cast <void >(MM); };
94
+ }
95
+
96
+ #line 38 "pure2-default-arguments.cpp2"
45
97
auto main (int const argc_, char ** argv_) -> int{
46
98
auto const args = cpp2::make_args (argc_, argv_);
47
- #line 15 "pure2-default-arguments.cpp2"
99
+ #line 39 "pure2-default-arguments.cpp2"
48
100
my_function_name ();
49
101
f ();
50
102
f (1 );
51
103
f (2 );
52
104
53
- []<bool V = gcc_clang_msvc_min_versions (1400 , 1600 , 1920 )>() mutable -> void {
105
+ []<bool V = gcc_clang_msvc_min_versions (1400 , 1600 , 1920 )>() -> void {
54
106
if constexpr (V) {
55
- std::cout << " a newer compiler\n " ;
107
+ std::cout << " \n a newer compiler\n " ;
56
108
}
57
109
else {
58
- std::cout << " an older compiler\n " ;
110
+ std::cout << " \n an older compiler\n " ;
59
111
}
60
112
}();
61
113
114
+ std::map<int ,int > m1 {};
115
+ CPP2_ASSERT_IN_BOUNDS_LITERAL (m1, 1 ) = 11 ;
116
+
117
+ std::map<int ,int > m2 {};
118
+ CPP2_ASSERT_IN_BOUNDS_LITERAL (m2, 1 ) = 22 ;
119
+
120
+ combine_maps (m1, m2, [](auto const & x, auto const & y) -> auto { return x + y + 33 ; });
121
+
122
+ std::cout << " " + cpp2::to_string (CPP2_UFCS (size)(m1)) + " , " + cpp2::to_string (CPP2_UFCS (size)(cpp2::move (m2))) + " , " + cpp2::to_string (CPP2_ASSERT_IN_BOUNDS_LITERAL (m1, 1 )) + " \n " ;
62
123
}
63
124
0 commit comments