1 // The MIT License (MIT)
2 //
3 // Copyright (c) 2015, 2016 Howard Hinnant
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to deal
7 // in the Software without restriction, including without limitation the rights
8 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 // copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be included in all
13 // copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 // SOFTWARE.
22
23 #include "date.h"
24
25 #include <type_traits>
26
27 template <class I, class J, class K>
28 constexpr
29 auto
test(I i,J j,K k)30 test(I i, J j, K k) -> decltype(i/j/k)
31 {
32 return i/j/k;
33 }
34
35 void
test(...)36 test(...)
37 {
38 }
39
40 int
main()41 main()
42 {
43 using std::is_same;
44 using namespace date;
45
46 static_assert(is_same<decltype(test( 1, 1, 1)), int>{}, "");
47 static_assert(is_same<decltype(test( 1, 1, 1_d)), month_day>{}, "");
48 static_assert(is_same<decltype(test( 1, 1, jan)), void>{}, "");
49 static_assert(is_same<decltype(test( 1, 1, 1_y)), void>{}, "");
50 static_assert(is_same<decltype(test( 1, 1, last)), month_day_last>{}, "");
51 static_assert(is_same<decltype(test( 1, 1, sun[1])), month_weekday>{}, "");
52 static_assert(is_same<decltype(test( 1, 1, sun[last])), month_weekday_last>{}, "");
53
54 static_assert(is_same<decltype(test( 1, 1_d, 1)), year_month_day>{}, "");
55 static_assert(is_same<decltype(test( 1, 1_d, 1_d)), void>{}, "");
56 static_assert(is_same<decltype(test( 1, 1_d, jan)), void>{}, "");
57 static_assert(is_same<decltype(test( 1, 1_d, 1_y)), year_month_day>{}, "");
58 static_assert(is_same<decltype(test( 1, 1_d, last)), void>{}, "");
59 static_assert(is_same<decltype(test( 1, 1_d, sun[1])), void>{}, "");
60 static_assert(is_same<decltype(test( 1, 1_d, sun[last])), void>{}, "");
61
62 static_assert(is_same<decltype(test( 1, jan, 1)), void>{}, "");
63 static_assert(is_same<decltype(test( 1, jan, 1_d)), void>{}, "");
64 static_assert(is_same<decltype(test( 1, jan, jan)), void>{}, "");
65 static_assert(is_same<decltype(test( 1, jan, 1_y)), void>{}, "");
66 static_assert(is_same<decltype(test( 1, jan, last)), void>{}, "");
67 static_assert(is_same<decltype(test( 1, jan, sun[1])), void>{}, "");
68 static_assert(is_same<decltype(test( 1, jan, sun[last])), void>{}, "");
69
70 static_assert(is_same<decltype(test( 1, 1_y, 1)), void>{}, "");
71 static_assert(is_same<decltype(test( 1, 1_y, 1_d)), void>{}, "");
72 static_assert(is_same<decltype(test( 1, 1_y, jan)), void>{}, "");
73 static_assert(is_same<decltype(test( 1, 1_y, 1_y)), void>{}, "");
74 static_assert(is_same<decltype(test( 1, 1_y, last)), void>{}, "");
75 static_assert(is_same<decltype(test( 1, 1_y, sun[1])), void>{}, "");
76 static_assert(is_same<decltype(test( 1, 1_y, sun[last])), void>{}, "");
77
78 static_assert(is_same<decltype(test( 1, last, 1)), year_month_day_last>{}, "");
79 static_assert(is_same<decltype(test( 1, last, 1_d)), void>{}, "");
80 static_assert(is_same<decltype(test( 1, last, jan)), void>{}, "");
81 static_assert(is_same<decltype(test( 1, last, 1_y)), year_month_day_last>{}, "");
82 static_assert(is_same<decltype(test( 1, last, last)), void>{}, "");
83 static_assert(is_same<decltype(test( 1, last, sun[1])), void>{}, "");
84 static_assert(is_same<decltype(test( 1, last, sun[last])), void>{}, "");
85
86 static_assert(is_same<decltype(test( 1, sun[1], 1)), year_month_weekday>{}, "");
87 static_assert(is_same<decltype(test( 1, sun[1], 1_d)), void>{}, "");
88 static_assert(is_same<decltype(test( 1, sun[1], jan)), void>{}, "");
89 static_assert(is_same<decltype(test( 1, sun[1], 1_y)), year_month_weekday>{}, "");
90 static_assert(is_same<decltype(test( 1, sun[1], last)), void>{}, "");
91 static_assert(is_same<decltype(test( 1, sun[1], sun[1])), void>{}, "");
92 static_assert(is_same<decltype(test( 1, sun[1], sun[last])), void>{}, "");
93
94 static_assert(is_same<decltype(test( 1, sun[last], 1)), year_month_weekday_last>{}, "");
95 static_assert(is_same<decltype(test( 1, sun[last], 1_d)), void>{}, "");
96 static_assert(is_same<decltype(test( 1, sun[last], jan)), void>{}, "");
97 static_assert(is_same<decltype(test( 1, sun[last], 1_y)), year_month_weekday_last>{}, "");
98 static_assert(is_same<decltype(test( 1, sun[last], last)), void>{}, "");
99 static_assert(is_same<decltype(test( 1, sun[last], sun[1])), void>{}, "");
100 static_assert(is_same<decltype(test( 1, sun[last], sun[last])), void>{}, "");
101
102 static_assert(is_same<decltype(test( 1_d, 1, 1)), year_month_day>{}, "");
103 static_assert(is_same<decltype(test( 1_d, 1, 1_d)), void>{}, "");
104 static_assert(is_same<decltype(test( 1_d, 1, jan)), void>{}, "");
105 static_assert(is_same<decltype(test( 1_d, 1, 1_y)), year_month_day>{}, "");
106 static_assert(is_same<decltype(test( 1_d, 1, last)), void>{}, "");
107 static_assert(is_same<decltype(test( 1_d, 1, sun[1])), void>{}, "");
108 static_assert(is_same<decltype(test( 1_d, 1, sun[last])), void>{}, "");
109
110 static_assert(is_same<decltype(test( 1_d, 1_d, 1)), void>{}, "");
111 static_assert(is_same<decltype(test( 1_d, 1_d, 1_d)), void>{}, "");
112 static_assert(is_same<decltype(test( 1_d, 1_d, jan)), void>{}, "");
113 static_assert(is_same<decltype(test( 1_d, 1_d, 1_y)), void>{}, "");
114 static_assert(is_same<decltype(test( 1_d, 1_d, last)), void>{}, "");
115 static_assert(is_same<decltype(test( 1_d, 1_d, sun[1])), void>{}, "");
116 static_assert(is_same<decltype(test( 1_d, 1_d, sun[last])), void>{}, "");
117
118 static_assert(is_same<decltype(test( 1_d, jan, 1)), year_month_day>{}, "");
119 static_assert(is_same<decltype(test( 1_d, jan, 1_d)), void>{}, "");
120 static_assert(is_same<decltype(test( 1_d, jan, jan)), void>{}, "");
121 static_assert(is_same<decltype(test( 1_d, jan, 1_y)), year_month_day>{}, "");
122 static_assert(is_same<decltype(test( 1_d, jan, last)), void>{}, "");
123 static_assert(is_same<decltype(test( 1_d, jan, sun[1])), void>{}, "");
124 static_assert(is_same<decltype(test( 1_d, jan, sun[last])), void>{}, "");
125
126 static_assert(is_same<decltype(test( 1_d, 1_y, 1)), void>{}, "");
127 static_assert(is_same<decltype(test( 1_d, 1_y, 1_d)), void>{}, "");
128 static_assert(is_same<decltype(test( 1_d, 1_y, jan)), void>{}, "");
129 static_assert(is_same<decltype(test( 1_d, 1_y, 1_y)), void>{}, "");
130 static_assert(is_same<decltype(test( 1_d, 1_y, last)), void>{}, "");
131 static_assert(is_same<decltype(test( 1_d, 1_y, sun[1])), void>{}, "");
132 static_assert(is_same<decltype(test( 1_d, 1_y, sun[last])), void>{}, "");
133
134 static_assert(is_same<decltype(test( 1_d, last, 1)), void>{}, "");
135 static_assert(is_same<decltype(test( 1_d, last, 1_d)), void>{}, "");
136 static_assert(is_same<decltype(test( 1_d, last, jan)), void>{}, "");
137 static_assert(is_same<decltype(test( 1_d, last, 1_y)), void>{}, "");
138 static_assert(is_same<decltype(test( 1_d, last, last)), void>{}, "");
139 static_assert(is_same<decltype(test( 1_d, last, sun[1])), void>{}, "");
140 static_assert(is_same<decltype(test( 1_d, last, sun[last])), void>{}, "");
141
142 static_assert(is_same<decltype(test( 1_d, sun[1], 1)), void>{}, "");
143 static_assert(is_same<decltype(test( 1_d, sun[1], 1_d)), void>{}, "");
144 static_assert(is_same<decltype(test( 1_d, sun[1], jan)), void>{}, "");
145 static_assert(is_same<decltype(test( 1_d, sun[1], 1_y)), void>{}, "");
146 static_assert(is_same<decltype(test( 1_d, sun[1], last)), void>{}, "");
147 static_assert(is_same<decltype(test( 1_d, sun[1], sun[1])), void>{}, "");
148 static_assert(is_same<decltype(test( 1_d, sun[1], sun[last])), void>{}, "");
149
150 static_assert(is_same<decltype(test( 1_d, sun[last], 1)), void>{}, "");
151 static_assert(is_same<decltype(test( 1_d, sun[last], 1_d)), void>{}, "");
152 static_assert(is_same<decltype(test( 1_d, sun[last], jan)), void>{}, "");
153 static_assert(is_same<decltype(test( 1_d, sun[last], 1_y)), void>{}, "");
154 static_assert(is_same<decltype(test( 1_d, sun[last], last)), void>{}, "");
155 static_assert(is_same<decltype(test( 1_d, sun[last], sun[1])), void>{}, "");
156 static_assert(is_same<decltype(test( 1_d, sun[last], sun[last])), void>{}, "");
157
158 static_assert(is_same<decltype(test( jan, 1, 1)), year_month_day>{}, "");
159 static_assert(is_same<decltype(test( jan, 1, 1_d)), void>{}, "");
160 static_assert(is_same<decltype(test( jan, 1, jan)), void>{}, "");
161 static_assert(is_same<decltype(test( jan, 1, 1_y)), year_month_day>{}, "");
162 static_assert(is_same<decltype(test( jan, 1, last)), void>{}, "");
163 static_assert(is_same<decltype(test( jan, 1, sun[1])), void>{}, "");
164 static_assert(is_same<decltype(test( jan, 1, sun[last])), void>{}, "");
165
166 static_assert(is_same<decltype(test( jan, 1_d, 1)), year_month_day>{}, "");
167 static_assert(is_same<decltype(test( jan, 1_d, 1_d)), void>{}, "");
168 static_assert(is_same<decltype(test( jan, 1_d, jan)), void>{}, "");
169 static_assert(is_same<decltype(test( jan, 1_d, 1_y)), year_month_day>{}, "");
170 static_assert(is_same<decltype(test( jan, 1_d, last)), void>{}, "");
171 static_assert(is_same<decltype(test( jan, 1_d, sun[1])), void>{}, "");
172 static_assert(is_same<decltype(test( jan, 1_d, sun[last])), void>{}, "");
173
174 static_assert(is_same<decltype(test( jan, jan, 1)), void>{}, "");
175 static_assert(is_same<decltype(test( jan, jan, 1_d)), void>{}, "");
176 static_assert(is_same<decltype(test( jan, jan, jan)), void>{}, "");
177 static_assert(is_same<decltype(test( jan, jan, 1_y)), void>{}, "");
178 static_assert(is_same<decltype(test( jan, jan, last)), void>{}, "");
179 static_assert(is_same<decltype(test( jan, jan, sun[1])), void>{}, "");
180 static_assert(is_same<decltype(test( jan, jan, sun[last])), void>{}, "");
181
182 static_assert(is_same<decltype(test( jan, 1_y, 1)), void>{}, "");
183 static_assert(is_same<decltype(test( jan, 1_y, 1_d)), void>{}, "");
184 static_assert(is_same<decltype(test( jan, 1_y, jan)), void>{}, "");
185 static_assert(is_same<decltype(test( jan, 1_y, 1_y)), void>{}, "");
186 static_assert(is_same<decltype(test( jan, 1_y, last)), void>{}, "");
187 static_assert(is_same<decltype(test( jan, 1_y, sun[1])), void>{}, "");
188 static_assert(is_same<decltype(test( jan, 1_y, sun[last])), void>{}, "");
189
190 static_assert(is_same<decltype(test( jan, last, 1)), year_month_day_last>{}, "");
191 static_assert(is_same<decltype(test( jan, last, 1_d)), void>{}, "");
192 static_assert(is_same<decltype(test( jan, last, jan)), void>{}, "");
193 static_assert(is_same<decltype(test( jan, last, 1_y)), year_month_day_last>{}, "");
194 static_assert(is_same<decltype(test( jan, last, last)), void>{}, "");
195 static_assert(is_same<decltype(test( jan, last, sun[1])), void>{}, "");
196 static_assert(is_same<decltype(test( jan, last, sun[last])), void>{}, "");
197
198 static_assert(is_same<decltype(test( jan, sun[1], 1)), year_month_weekday>{}, "");
199 static_assert(is_same<decltype(test( jan, sun[1], 1_d)), void>{}, "");
200 static_assert(is_same<decltype(test( jan, sun[1], jan)), void>{}, "");
201 static_assert(is_same<decltype(test( jan, sun[1], 1_y)), year_month_weekday>{}, "");
202 static_assert(is_same<decltype(test( jan, sun[1], last)), void>{}, "");
203 static_assert(is_same<decltype(test( jan, sun[1], sun[1])), void>{}, "");
204 static_assert(is_same<decltype(test( jan, sun[1], sun[last])), void>{}, "");
205
206 static_assert(is_same<decltype(test( jan, sun[last], 1)), year_month_weekday_last>{}, "");
207 static_assert(is_same<decltype(test( jan, sun[last], 1_d)), void>{}, "");
208 static_assert(is_same<decltype(test( jan, sun[last], jan)), void>{}, "");
209 static_assert(is_same<decltype(test( jan, sun[last], 1_y)), year_month_weekday_last>{}, "");
210 static_assert(is_same<decltype(test( jan, sun[last], last)), void>{}, "");
211 static_assert(is_same<decltype(test( jan, sun[last], sun[1])), void>{}, "");
212 static_assert(is_same<decltype(test( jan, sun[last], sun[last])), void>{}, "");
213
214 static_assert(is_same<decltype(test( 1_y, 1, 1)), year_month_day>{}, "");
215 static_assert(is_same<decltype(test( 1_y, 1, 1_d)), year_month_day>{}, "");
216 static_assert(is_same<decltype(test( 1_y, 1, jan)), void>{}, "");
217 static_assert(is_same<decltype(test( 1_y, 1, 1_y)), void>{}, "");
218 static_assert(is_same<decltype(test( 1_y, 1, last)), year_month_day_last>{}, "");
219 static_assert(is_same<decltype(test( 1_y, 1, sun[1])), year_month_weekday>{}, "");
220 static_assert(is_same<decltype(test( 1_y, 1, sun[last])), year_month_weekday_last>{}, "");
221
222 static_assert(is_same<decltype(test( 1_y, 1_d, 1)), void>{}, "");
223 static_assert(is_same<decltype(test( 1_y, 1_d, 1_d)), void>{}, "");
224 static_assert(is_same<decltype(test( 1_y, 1_d, jan)), void>{}, "");
225 static_assert(is_same<decltype(test( 1_y, 1_d, 1_y)), void>{}, "");
226 static_assert(is_same<decltype(test( 1_y, 1_d, last)), void>{}, "");
227 static_assert(is_same<decltype(test( 1_y, 1_d, sun[1])), void>{}, "");
228 static_assert(is_same<decltype(test( 1_y, 1_d, sun[last])), void>{}, "");
229
230 static_assert(is_same<decltype(test( 1_y, jan, 1)), year_month_day>{}, "");
231 static_assert(is_same<decltype(test( 1_y, jan, 1_d)), year_month_day>{}, "");
232 static_assert(is_same<decltype(test( 1_y, jan, jan)), void>{}, "");
233 static_assert(is_same<decltype(test( 1_y, jan, 1_y)), void>{}, "");
234 static_assert(is_same<decltype(test( 1_y, jan, last)), year_month_day_last>{}, "");
235 static_assert(is_same<decltype(test( 1_y, jan, sun[1])), year_month_weekday>{}, "");
236 static_assert(is_same<decltype(test( 1_y, jan, sun[last])), year_month_weekday_last>{}, "");
237
238 static_assert(is_same<decltype(test( 1_y, 1_y, 1)), void>{}, "");
239 static_assert(is_same<decltype(test( 1_y, 1_y, 1_d)), void>{}, "");
240 static_assert(is_same<decltype(test( 1_y, 1_y, jan)), void>{}, "");
241 static_assert(is_same<decltype(test( 1_y, 1_y, 1_y)), void>{}, "");
242 static_assert(is_same<decltype(test( 1_y, 1_y, last)), void>{}, "");
243 static_assert(is_same<decltype(test( 1_y, 1_y, sun[1])), void>{}, "");
244 static_assert(is_same<decltype(test( 1_y, 1_y, sun[last])), void>{}, "");
245
246 static_assert(is_same<decltype(test( 1_y, last, 1)), void>{}, "");
247 static_assert(is_same<decltype(test( 1_y, last, 1_d)), void>{}, "");
248 static_assert(is_same<decltype(test( 1_y, last, jan)), void>{}, "");
249 static_assert(is_same<decltype(test( 1_y, last, 1_y)), void>{}, "");
250 static_assert(is_same<decltype(test( 1_y, last, last)), void>{}, "");
251 static_assert(is_same<decltype(test( 1_y, last, sun[1])), void>{}, "");
252 static_assert(is_same<decltype(test( 1_y, last, sun[last])), void>{}, "");
253
254 static_assert(is_same<decltype(test( 1_y, sun[1], 1)), void>{}, "");
255 static_assert(is_same<decltype(test( 1_y, sun[1], 1_d)), void>{}, "");
256 static_assert(is_same<decltype(test( 1_y, sun[1], jan)), void>{}, "");
257 static_assert(is_same<decltype(test( 1_y, sun[1], 1_y)), void>{}, "");
258 static_assert(is_same<decltype(test( 1_y, sun[1], last)), void>{}, "");
259 static_assert(is_same<decltype(test( 1_y, sun[1], sun[1])), void>{}, "");
260 static_assert(is_same<decltype(test( 1_y, sun[1], sun[last])), void>{}, "");
261
262 static_assert(is_same<decltype(test( 1_y, sun[last], 1)), void>{}, "");
263 static_assert(is_same<decltype(test( 1_y, sun[last], 1_d)), void>{}, "");
264 static_assert(is_same<decltype(test( 1_y, sun[last], jan)), void>{}, "");
265 static_assert(is_same<decltype(test( 1_y, sun[last], 1_y)), void>{}, "");
266 static_assert(is_same<decltype(test( 1_y, sun[last], last)), void>{}, "");
267 static_assert(is_same<decltype(test( 1_y, sun[last], sun[1])), void>{}, "");
268 static_assert(is_same<decltype(test( 1_y, sun[last], sun[last])), void>{}, "");
269
270 static_assert(is_same<decltype(test( last, 1, 1)), year_month_day_last>{}, "");
271 static_assert(is_same<decltype(test( last, 1, 1_d)), void>{}, "");
272 static_assert(is_same<decltype(test( last, 1, jan)), void>{}, "");
273 static_assert(is_same<decltype(test( last, 1, 1_y)), year_month_day_last>{}, "");
274 static_assert(is_same<decltype(test( last, 1, last)), void>{}, "");
275 static_assert(is_same<decltype(test( last, 1, sun[1])), void>{}, "");
276 static_assert(is_same<decltype(test( last, 1, sun[last])), void>{}, "");
277
278 static_assert(is_same<decltype(test( last, 1_d, 1)), void>{}, "");
279 static_assert(is_same<decltype(test( last, 1_d, 1_d)), void>{}, "");
280 static_assert(is_same<decltype(test( last, 1_d, jan)), void>{}, "");
281 static_assert(is_same<decltype(test( last, 1_d, 1_y)), void>{}, "");
282 static_assert(is_same<decltype(test( last, 1_d, last)), void>{}, "");
283 static_assert(is_same<decltype(test( last, 1_d, sun[1])), void>{}, "");
284 static_assert(is_same<decltype(test( last, 1_d, sun[last])), void>{}, "");
285
286 static_assert(is_same<decltype(test( last, jan, 1)), year_month_day_last>{}, "");
287 static_assert(is_same<decltype(test( last, jan, 1_d)), void>{}, "");
288 static_assert(is_same<decltype(test( last, jan, jan)), void>{}, "");
289 static_assert(is_same<decltype(test( last, jan, 1_y)), year_month_day_last>{}, "");
290 static_assert(is_same<decltype(test( last, jan, last)), void>{}, "");
291 static_assert(is_same<decltype(test( last, jan, sun[1])), void>{}, "");
292 static_assert(is_same<decltype(test( last, jan, sun[last])), void>{}, "");
293
294 static_assert(is_same<decltype(test( last, 1_y, 1)), void>{}, "");
295 static_assert(is_same<decltype(test( last, 1_y, 1_d)), void>{}, "");
296 static_assert(is_same<decltype(test( last, 1_y, jan)), void>{}, "");
297 static_assert(is_same<decltype(test( last, 1_y, 1_y)), void>{}, "");
298 static_assert(is_same<decltype(test( last, 1_y, last)), void>{}, "");
299 static_assert(is_same<decltype(test( last, 1_y, sun[1])), void>{}, "");
300 static_assert(is_same<decltype(test( last, 1_y, sun[last])), void>{}, "");
301
302 static_assert(is_same<decltype(test( last, last, 1)), void>{}, "");
303 static_assert(is_same<decltype(test( last, last, 1_d)), void>{}, "");
304 static_assert(is_same<decltype(test( last, last, jan)), void>{}, "");
305 static_assert(is_same<decltype(test( last, last, 1_y)), void>{}, "");
306 static_assert(is_same<decltype(test( last, last, last)), void>{}, "");
307 static_assert(is_same<decltype(test( last, last, sun[1])), void>{}, "");
308 static_assert(is_same<decltype(test( last, last, sun[last])), void>{}, "");
309
310 static_assert(is_same<decltype(test( last, sun[1], 1)), void>{}, "");
311 static_assert(is_same<decltype(test( last, sun[1], 1_d)), void>{}, "");
312 static_assert(is_same<decltype(test( last, sun[1], jan)), void>{}, "");
313 static_assert(is_same<decltype(test( last, sun[1], 1_y)), void>{}, "");
314 static_assert(is_same<decltype(test( last, sun[1], last)), void>{}, "");
315 static_assert(is_same<decltype(test( last, sun[1], sun[1])), void>{}, "");
316 static_assert(is_same<decltype(test( last, sun[1], sun[last])), void>{}, "");
317
318 static_assert(is_same<decltype(test( last, sun[last], 1)), void>{}, "");
319 static_assert(is_same<decltype(test( last, sun[last], 1_d)), void>{}, "");
320 static_assert(is_same<decltype(test( last, sun[last], jan)), void>{}, "");
321 static_assert(is_same<decltype(test( last, sun[last], 1_y)), void>{}, "");
322 static_assert(is_same<decltype(test( last, sun[last], last)), void>{}, "");
323 static_assert(is_same<decltype(test( last, sun[last], sun[1])), void>{}, "");
324 static_assert(is_same<decltype(test( last, sun[last], sun[last])), void>{}, "");
325
326 static_assert(is_same<decltype(test( sun[1], 1, 1)), year_month_weekday>{}, "");
327 static_assert(is_same<decltype(test( sun[1], 1, 1_d)), void>{}, "");
328 static_assert(is_same<decltype(test( sun[1], 1, jan)), void>{}, "");
329 static_assert(is_same<decltype(test( sun[1], 1, 1_y)), year_month_weekday>{}, "");
330 static_assert(is_same<decltype(test( sun[1], 1, last)), void>{}, "");
331 static_assert(is_same<decltype(test( sun[1], 1, sun[1])), void>{}, "");
332 static_assert(is_same<decltype(test( sun[1], 1, sun[last])), void>{}, "");
333
334 static_assert(is_same<decltype(test( sun[1], 1_d, 1)), void>{}, "");
335 static_assert(is_same<decltype(test( sun[1], 1_d, 1_d)), void>{}, "");
336 static_assert(is_same<decltype(test( sun[1], 1_d, jan)), void>{}, "");
337 static_assert(is_same<decltype(test( sun[1], 1_d, 1_y)), void>{}, "");
338 static_assert(is_same<decltype(test( sun[1], 1_d, last)), void>{}, "");
339 static_assert(is_same<decltype(test( sun[1], 1_d, sun[1])), void>{}, "");
340 static_assert(is_same<decltype(test( sun[1], 1_d, sun[last])), void>{}, "");
341
342 static_assert(is_same<decltype(test( sun[1], jan, 1)), year_month_weekday>{}, "");
343 static_assert(is_same<decltype(test( sun[1], jan, 1_d)), void>{}, "");
344 static_assert(is_same<decltype(test( sun[1], jan, jan)), void>{}, "");
345 static_assert(is_same<decltype(test( sun[1], jan, 1_y)), year_month_weekday>{}, "");
346 static_assert(is_same<decltype(test( sun[1], jan, last)), void>{}, "");
347 static_assert(is_same<decltype(test( sun[1], jan, sun[1])), void>{}, "");
348 static_assert(is_same<decltype(test( sun[1], jan, sun[last])), void>{}, "");
349
350 static_assert(is_same<decltype(test( sun[1], 1_y, 1)), void>{}, "");
351 static_assert(is_same<decltype(test( sun[1], 1_y, 1_d)), void>{}, "");
352 static_assert(is_same<decltype(test( sun[1], 1_y, jan)), void>{}, "");
353 static_assert(is_same<decltype(test( sun[1], 1_y, 1_y)), void>{}, "");
354 static_assert(is_same<decltype(test( sun[1], 1_y, last)), void>{}, "");
355 static_assert(is_same<decltype(test( sun[1], 1_y, sun[1])), void>{}, "");
356 static_assert(is_same<decltype(test( sun[1], 1_y, sun[last])), void>{}, "");
357
358 static_assert(is_same<decltype(test( sun[1], last, 1)), void>{}, "");
359 static_assert(is_same<decltype(test( sun[1], last, 1_d)), void>{}, "");
360 static_assert(is_same<decltype(test( sun[1], last, jan)), void>{}, "");
361 static_assert(is_same<decltype(test( sun[1], last, 1_y)), void>{}, "");
362 static_assert(is_same<decltype(test( sun[1], last, last)), void>{}, "");
363 static_assert(is_same<decltype(test( sun[1], last, sun[1])), void>{}, "");
364 static_assert(is_same<decltype(test( sun[1], last, sun[last])), void>{}, "");
365
366 static_assert(is_same<decltype(test( sun[1], sun[1], 1)), void>{}, "");
367 static_assert(is_same<decltype(test( sun[1], sun[1], 1_d)), void>{}, "");
368 static_assert(is_same<decltype(test( sun[1], sun[1], jan)), void>{}, "");
369 static_assert(is_same<decltype(test( sun[1], sun[1], 1_y)), void>{}, "");
370 static_assert(is_same<decltype(test( sun[1], sun[1], last)), void>{}, "");
371 static_assert(is_same<decltype(test( sun[1], sun[1], sun[1])), void>{}, "");
372 static_assert(is_same<decltype(test( sun[1], sun[1], sun[last])), void>{}, "");
373
374 static_assert(is_same<decltype(test( sun[1], sun[last], 1)), void>{}, "");
375 static_assert(is_same<decltype(test( sun[1], sun[last], 1_d)), void>{}, "");
376 static_assert(is_same<decltype(test( sun[1], sun[last], jan)), void>{}, "");
377 static_assert(is_same<decltype(test( sun[1], sun[last], 1_y)), void>{}, "");
378 static_assert(is_same<decltype(test( sun[1], sun[last], last)), void>{}, "");
379 static_assert(is_same<decltype(test( sun[1], sun[last], sun[1])), void>{}, "");
380 static_assert(is_same<decltype(test( sun[1], sun[last], sun[last])), void>{}, "");
381
382 static_assert(is_same<decltype(test(sun[last], 1, 1)), year_month_weekday_last>{}, "");
383 static_assert(is_same<decltype(test(sun[last], 1, 1_d)), void>{}, "");
384 static_assert(is_same<decltype(test(sun[last], 1, jan)), void>{}, "");
385 static_assert(is_same<decltype(test(sun[last], 1, 1_y)), year_month_weekday_last>{}, "");
386 static_assert(is_same<decltype(test(sun[last], 1, last)), void>{}, "");
387 static_assert(is_same<decltype(test(sun[last], 1, sun[1])), void>{}, "");
388 static_assert(is_same<decltype(test(sun[last], 1, sun[last])), void>{}, "");
389
390 static_assert(is_same<decltype(test(sun[last], 1_d, 1)), void>{}, "");
391 static_assert(is_same<decltype(test(sun[last], 1_d, 1_d)), void>{}, "");
392 static_assert(is_same<decltype(test(sun[last], 1_d, jan)), void>{}, "");
393 static_assert(is_same<decltype(test(sun[last], 1_d, 1_y)), void>{}, "");
394 static_assert(is_same<decltype(test(sun[last], 1_d, last)), void>{}, "");
395 static_assert(is_same<decltype(test(sun[last], 1_d, sun[1])), void>{}, "");
396 static_assert(is_same<decltype(test(sun[last], 1_d, sun[last])), void>{}, "");
397
398 static_assert(is_same<decltype(test(sun[last], jan, 1)), year_month_weekday_last>{}, "");
399 static_assert(is_same<decltype(test(sun[last], jan, 1_d)), void>{}, "");
400 static_assert(is_same<decltype(test(sun[last], jan, jan)), void>{}, "");
401 static_assert(is_same<decltype(test(sun[last], jan, 1_y)), year_month_weekday_last>{}, "");
402 static_assert(is_same<decltype(test(sun[last], jan, last)), void>{}, "");
403 static_assert(is_same<decltype(test(sun[last], jan, sun[1])), void>{}, "");
404 static_assert(is_same<decltype(test(sun[last], jan, sun[last])), void>{}, "");
405
406 static_assert(is_same<decltype(test(sun[last], 1_y, 1)), void>{}, "");
407 static_assert(is_same<decltype(test(sun[last], 1_y, 1_d)), void>{}, "");
408 static_assert(is_same<decltype(test(sun[last], 1_y, jan)), void>{}, "");
409 static_assert(is_same<decltype(test(sun[last], 1_y, 1_y)), void>{}, "");
410 static_assert(is_same<decltype(test(sun[last], 1_y, last)), void>{}, "");
411 static_assert(is_same<decltype(test(sun[last], 1_y, sun[1])), void>{}, "");
412 static_assert(is_same<decltype(test(sun[last], 1_y, sun[last])), void>{}, "");
413
414 static_assert(is_same<decltype(test(sun[last], last, 1)), void>{}, "");
415 static_assert(is_same<decltype(test(sun[last], last, 1_d)), void>{}, "");
416 static_assert(is_same<decltype(test(sun[last], last, jan)), void>{}, "");
417 static_assert(is_same<decltype(test(sun[last], last, 1_y)), void>{}, "");
418 static_assert(is_same<decltype(test(sun[last], last, last)), void>{}, "");
419 static_assert(is_same<decltype(test(sun[last], last, sun[1])), void>{}, "");
420 static_assert(is_same<decltype(test(sun[last], last, sun[last])), void>{}, "");
421
422 static_assert(is_same<decltype(test(sun[last], sun[1], 1)), void>{}, "");
423 static_assert(is_same<decltype(test(sun[last], sun[1], 1_d)), void>{}, "");
424 static_assert(is_same<decltype(test(sun[last], sun[1], jan)), void>{}, "");
425 static_assert(is_same<decltype(test(sun[last], sun[1], 1_y)), void>{}, "");
426 static_assert(is_same<decltype(test(sun[last], sun[1], last)), void>{}, "");
427 static_assert(is_same<decltype(test(sun[last], sun[1], sun[1])), void>{}, "");
428 static_assert(is_same<decltype(test(sun[last], sun[1], sun[last])), void>{}, "");
429
430 static_assert(is_same<decltype(test(sun[last], sun[last], 1)), void>{}, "");
431 static_assert(is_same<decltype(test(sun[last], sun[last], 1_d)), void>{}, "");
432 static_assert(is_same<decltype(test(sun[last], sun[last], jan)), void>{}, "");
433 static_assert(is_same<decltype(test(sun[last], sun[last], 1_y)), void>{}, "");
434 static_assert(is_same<decltype(test(sun[last], sun[last], last)), void>{}, "");
435 static_assert(is_same<decltype(test(sun[last], sun[last], sun[1])), void>{}, "");
436 static_assert(is_same<decltype(test(sun[last], sun[last], sun[last])), void>{}, "");
437 }
438