|
7 | 7 | #include "cpp2util.h"
|
8 | 8 |
|
9 | 9 |
|
10 |
| -#line 46 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
| 10 | +#line 46 "pure2-bugfix-for-dependent-types.cpp2" |
11 | 11 | template<typename T> class t;
|
12 | 12 |
|
13 | 13 |
|
14 |
| -#line 108 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
15 |
| -template<typename T> class v; |
16 |
| - |
17 |
| - |
18 | 14 | //=== Cpp2 type definitions and function declarations ===========================
|
19 | 15 |
|
20 |
| -#line 1 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
| 16 | +#line 1 "pure2-bugfix-for-dependent-types.cpp2" |
21 | 17 | template<typename T> using identity = T;
|
22 | 18 |
|
23 | 19 | template<typename T, T::value_type V> [[nodiscard]] auto f(cpp2::in<typename T::value_type> x) -> T::value_type;
|
24 | 20 |
|
25 | 21 |
|
26 |
| -#line 46 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
| 22 | +#line 46 "pure2-bugfix-for-dependent-types.cpp2" |
27 | 23 | template<typename T> class t {
|
28 | 24 | struct u_x_as_base { T::value_type x; };
|
29 | 25 |
|
30 |
| -#line 47 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
| 26 | +#line 47 "pure2-bugfix-for-dependent-types.cpp2" |
31 | 27 | public: class u: public u_x_as_base, public T::type {
|
32 | 28 |
|
33 |
| -#line 50 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
| 29 | +#line 50 "pure2-bugfix-for-dependent-types.cpp2" |
34 | 30 | };
|
35 | 31 | public: T::value_type x {0};
|
36 | 32 | };
|
37 | 33 |
|
38 |
| -// Dependent, non-deducible parameters |
39 |
| -// are wrapped like non-dependent parameters. |
40 |
| -template<typename T> auto init(cpp2::out<std::integral_constant<cpp2::i32,T::value>> x) -> void; |
41 |
| -template<typename T> auto init(cpp2::out<std::integral_constant<cpp2::i32,T::value>> x, T const& _) -> void; |
42 |
| -template<typename T> [[nodiscard]] auto id(cpp2::in<std::integral_constant<cpp2::i32,T::value>> x) -> auto&&; |
43 |
| -template<typename T> auto id(cpp2::in<std::integral_constant<cpp2::i32,T::value>> x, T const& y) -> void; |
44 |
| - |
45 | 34 | auto main() -> int;
|
46 | 35 |
|
47 | 36 |
|
48 |
| -#line 108 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
49 |
| -template<typename T> class v { |
50 |
| - public: explicit v(T const& x); |
51 |
| -#line 109 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
52 |
| - public: auto operator=(T const& x) -> v& ; |
53 |
| - |
54 |
| - public: v(v const&) = delete; /* No 'that' constructor, suppress copy */ |
55 |
| - public: auto operator=(v const&) -> void = delete; |
56 |
| -#line 110 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
57 |
| -}; |
58 |
| - |
59 |
| - |
60 | 37 | //=== Cpp2 function definitions =================================================
|
61 | 38 |
|
62 | 39 |
|
63 |
| -#line 3 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
| 40 | +#line 3 "pure2-bugfix-for-dependent-types.cpp2" |
64 | 41 | template<typename T, T::value_type V> [[nodiscard]] auto f(cpp2::in<typename T::value_type> x) -> T::value_type{
|
65 | 42 | cpp2::Default.expects(cpp2::is<typename T::value_type>(x), "");
|
66 | 43 | cpp2::deferred_init<typename T::value_type> y;
|
@@ -104,30 +81,10 @@ template<typename T, T::value_type V> [[nodiscard]] auto f(cpp2::in<typename T::
|
104 | 81 | }
|
105 | 82 | }
|
106 | 83 |
|
107 |
| -#line 56 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
108 |
| -template<typename T> auto init(cpp2::out<std::integral_constant<cpp2::i32,T::value>> x) -> void{x.construct(); } |
109 |
| -template<typename T> auto init(cpp2::out<std::integral_constant<cpp2::i32,T::value>> x, T const& _) -> void{x.construct(); } |
110 |
| -template<typename T> [[nodiscard]] auto id(cpp2::in<std::integral_constant<cpp2::i32,T::value>> x) -> auto&& { return x; } |
111 |
| -template<typename T> auto id(cpp2::in<std::integral_constant<cpp2::i32,T::value>> x, T const& y) -> void{cpp2::Default.expects(&x==&y, ""); } |
112 |
| - |
| 84 | +#line 54 "pure2-bugfix-for-dependent-types.cpp2" |
113 | 85 | auto main() -> int{
|
114 | 86 | using zero = std::integral_constant<cpp2::i32,0>;
|
115 |
| - |
116 | 87 | (void) f<zero,0>(0);
|
117 |
| - (void) t<zero>::u{}; |
118 |
| - |
119 |
| - cpp2::deferred_init<zero> z; |
120 |
| - init<zero>(cpp2::out(&z)); |
121 |
| - cpp2::Default.expects(&id<zero>(z.value())==&z.value(), ""); |
122 |
| - |
123 |
| - // Deducible parameters. |
124 |
| - (void) v{0}; |
125 |
| - (void) []<typename T>(std::vector<T> const& x) -> void{}(std::vector<cpp2::i32>{}); |
126 |
| - (void) []<typename T>(std::vector<std::vector<T>> const& x) -> void{}(std::vector<std::vector<cpp2::i32>>{}); |
127 |
| - // Uncomment once `typename` is supported for template arguments. |
128 |
| - // _ = :<T, U> (x: std::pair<T, typename U::value_type>, y: U) = {}(:std::pair = (0, 0), z); |
129 |
| - init(cpp2::out(&z.value()), z.value()); |
130 |
| - id(z.value(), std::move(z.value())); |
131 | 88 |
|
132 | 89 | // Nesting is irrelevant.
|
133 | 90 | (void) []<typename T>() -> void{(void) typename T::value_type{}; };
|
@@ -157,11 +114,3 @@ auto main() -> int{
|
157 | 114 | }(0);
|
158 | 115 | }
|
159 | 116 |
|
160 |
| -#line 109 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
161 |
| - template <typename T> v<T>::v(T const& x){} |
162 |
| -#line 109 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
163 |
| - template <typename T> auto v<T>::operator=(T const& x) -> v& { |
164 |
| - return *this; |
165 |
| -#line 109 "pure2-bugfix-for-dependent-types-and-deducible-parameters.cpp2" |
166 |
| - } |
167 |
| - |
0 commit comments